Topcoder SRM 636 Div2 B
来源:互联网 发布:五级三阶制算法 编辑:程序博客网 时间:2024/05/21 05:57
题意:定义一种数叫做”sortedness”,对于
思路:由于缺失的数最大只有5个,所以直接枚举他们的排列组合,判断是不是等于给定的数。O(120n).
#include <bits/stdc++.h>using namespace std;class SortishDiv2{ public: int a[110],s[110]; int b[110]; bool vis[110]; int ans; int Judge(int num,int n) { int ant = 0 ; for(int i= n-1;i>=0;i--) { for(int j = i+1;j<n;j++) { if(s[i] < s[j]) ant++; if(ant > num) return 0; } } return ant == num; } void dfs(int num,int ss,int n) { if(num == a[0]) { ans += Judge(ss ,n); return ; } for(int i = 1;i<=a[0];i++) { if(vis[a[i]]) continue; vis[a[i]] = true; s[b[num+1]] = a[i]; dfs(num+1,ss,n); vis[a[i]] = false; } } int ways(int sortedness, vector <int> seq) { int n = seq.size(); if(sortedness > n*n ) return 0; memset(vis,false,sizeof(vis)); b[0] = 0; a[0] = 0; for(int i = 0;i<n;i++) { s[i] = seq[i]; if(seq[i] == 0) { b[++b[0]] = i; } else vis[seq[i]] = true; } for(int i = 1;i<=n;i++) { if(!vis[i]) a[++a[0]] = i; } memset(vis,false,sizeof(vis)); ans = 0; dfs(0,sortedness,n); return ans; }};
0 0
- Topcoder SRM 636 Div2 B
- Topcoder SRM 683 Div2 B
- TopCoder SRM 637 Div2 B
- Topcoder SRM 636 div2 1000
- Topcoder SRM 636 Div2 C
- Topcoder SRM 636 Div2 A
- topcoder SRM 513 DIV2
- TopCoder SRM 543 DIV2
- topcoder-srm-233-div2
- Topcoder SRM Div2 Level2
- TopCoder SRM 144 div2
- TOPCODER SRM 612 DIV2
- TOPCODER SRM 613 DIV2
- topcoder-srm-613-div2
- topcoder-srm-604-div2
- topcoder-srm-595-div2
- Topcoder SRM 676 div2
- Topcoder SRM 677 div2
- 多线程写mysql
- 从n个数中,找出最小的k个数
- java 小方法
- C++走向远洋——60(十四周阅读程序、STL中的简单容器和迭代器)
- matlab画频率直方图,支持颜色变换
- Topcoder SRM 636 Div2 B
- Apache DBCP连接池获取数据库连接慢的优化处理
- android ratingbar星星显示
- VS下boost使用记录
- Android面试题
- 1080. Graduate Admission (30) PAT
- php 设计模式之简单工厂模式
- 算法导论课后习题第二章(2)
- 3336 Count the string