TopCoder 636 B 【暴力】
来源:互联网 发布:数据录入员在家兼职 编辑:程序博客网 时间:2024/05/29 03:21
题意:给出一个排列,其中的一些数字不小心给擦掉了。但是知道这个序列满足 i < j && a[ i ] < a[ j ] 的元素对有n个,然后让你求还原这个排列之后有几个排列是满足条件的
分析:很简单很暴力,暴力填入擦掉的值,然后看有多少对元素,然后比较就好。
代码:
#include <cstdlib>#include <cctype>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include <string>#include <iostream>#include <sstream>#include <map>#include <set>#include <queue>#include <stack>#include <fstream>#include <numeric>#include <iomanip>#include <bitset>#include <list>#include <stdexcept>#include <functional>#include <utility>#include <ctime>using namespace std;#define PB push_back#define MP make_pair#define REP(i,n) for(i=0;i<(n);++i)#define FOR(i,l,h) for(i=(l);i<=(h);++i)#define FORD(i,h,l) for(i=(h);i>=(l);--i)typedef vector<int> VI;typedef vector<string> VS;typedef vector<double> VD;typedef long long LL;typedef pair<int,int> PII;class SortishDiv2{ public: int ways(int sortedness, vector <int> seq) { int ans = 0; int vis[200],dis[200]; int pps[200]; memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); for(int i=0;i<seq.size();i++) { dis[seq[i]]=1; if(seq[i]==0) { vis[i]=1; continue; } for(int j=i+1; j<seq.size();j++) { if(seq[i]==0) continue; if(seq[i]<seq[j]) ans++; } } sortedness -= ans; int count = 0; vector<int> cc,wei; for(int i=1;i<=seq.size();i++){ if(dis[i]==0){ cc.push_back(i); } if(vis[i-1]) wei.push_back(i-1); } if(cc.size()==0) return sortedness==0; do { ans = 0; for(int i=0;i<seq.size();i++) pps[i] = seq[i]; for(int i = 0;i<wei.size();i++) { for(int k=0;k<seq.size();k++) { if(pps[k]==0) continue; if(k>wei[i] && pps[k]>cc[i] || k<wei[i] && pps[k]<cc[i]){ ans++; } } pps[wei[i]]=cc[i]; } if(ans == sortedness) count++; }while(next_permutation(cc.begin(),cc.end())); cc.clear(); wei.clear(); return count; }};int main(){ freopen("Input.txt","r",stdin); SortishDiv2 a; int n; vector<int> v; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { int x; scanf("%d",&x); v.push_back(x); } cout<<a.ways(n,v)<<endl; v.clear(); } return 0;}
0 0
- TopCoder 636 B 【暴力】
- Topcoder SRM 636 Div2 B
- Topcoder SRM 636 Div1 B
- TopCoder SRM665 Div2 B
- topcoder-srm610-div2-550(暴力乱搞)
- Topcoder SRM660 DIV1 250 Coversta(暴力枚举)
- Topcoder SRM660,DIV1 250,找准突破口,暴力
- Topcoder SRM 683 Div2 B
- TopCoder SRM 637 Div2 B
- Topcoder 721 div2-B RememberWordsEasy
- ACdream 暴力专场B
- B. Cola (暴力+优化)
- cf 488 B(暴力)
- Codeforces 550B 【暴力】
- CodeForces 665B【暴力】
- CodeForces 66B 暴力
- codeforces 903B(暴力)
- Eming Cup 网络赛 B-Topcoder
- 学习Java第一天
- 也谈析构:析构函数何时被调用
- zed属性
- fourth(工资)
- ctags为系统头文件目录生成tags
- TopCoder 636 B 【暴力】
- NOI 2003 逃学的小孩【树形DP】
- 转自牛人博客一篇文章: 从最大似然到EM算法浅解
- linux下用vim+ctags看源代码
- 两篇文章的相似度比较
- --计算机专业就业前景--
- 我的编程学习日志(13)--打开一个文件的方法(system(),ShellExecute())
- Java异常机制
- cocos2d-x应用窗口相关源码剖析5-其他细节