UVA.1262 Password ( dfs求字典序第k大 )
2017-09-05 13:01
375 查看
UVA.1262 Password ( dfs求字典序第k大 )
题意分析
其实很简单,类似求康托展开那样,dfs求解数目,然后看答案。这题密码数目不足5个,要算NO,所以wa了一会。
比较水的题目。
代码总览
#include <bits/stdc++.h> using namespace std; char pasword1[10][10]; char pasword2[10][10]; bool isoccupy[26]; int num[6]; int t; int tar; int temp; vector<char> v[6]; vector<char> ans; void dfs(int depth){ if(depth == 5) return; if(v[depth].size() == 0){ dfs(depth+1); }else{ for(int i = 0;i<v[depth].size();++i){ if(temp > num[depth]){ temp-=num[depth]; }else{ ans.push_back(v[depth][i]); dfs(depth+1); return; } } } return; } int main() { // freopen("in.txt","r",stdin); scanf("%d",&t); while(t--){ memset(pasword1,0,sizeof pasword1); memset(pasword2,0,sizeof pasword2); for(int i = 0;i<6;++i) v[i].clear(); scanf("%d",&tar); for(int i = 0;i<6;++i) scanf("%s",pasword1[i]); for(int i = 0;i<6;++i) scanf("%s",pasword2[i]); for(int i = 0;i<5;++i){ memset(isoccupy,0,sizeof isoccupy); for(int j = 0;j<6;++j){ if(isoccupy[pasword1[j][i] - 'A']){ continue; } for(int k = 0;k<6;++k){ if(pasword1[j][i] == pasword2[k][i]){ v[i].push_back(pasword1[j][i]); isoccupy[pasword1[j][i]-'A'] = true; break; } } } } int tot = 1; bool notok = false; for(int i = 0;i<5;++i){ if(v[i].size() != 0){ tot *= v[i].size(); }else{ notok = true; break; } } if(tot < tar || notok){ printf("NO\n"); continue; }else{ for(int i = 0;i<5;++i) sort(v[i].begin(),v[i].end()); memset(num,0,sizeof num); int now = 1; for(int i = 4;i>=0;--i){ if(v[i].size() != 0){ num[i] = now; now *= v[i].size(); } } ans.clear(); temp = tar; dfs(0); for(int i = 0;i<ans.size();++i) printf("%c",ans[i]); printf("\n"); } } return 0; }
相关文章推荐
- UVa 1262 (第k字典序) Password
- UVA1262Password(第K字典序)
- uva 1262 Password 字典序第k个
- Password UVA - 1262——DFS
- UVA 1262编码(第k字典序)
- UVA 1262(p323p)----Password
- UVA 1262 Password (水题)
- UVA1262——password
- UVa1262 - Password
- Password UVA - 1262
- UVA 1262 Password
- UVALive 4126 (LA 4126) Password Suspects AC自动机 + DP + 剪枝dfs
- 【数学】Password, ACM/ICPC Daejon 2010, UVa1262
- uva1262 Password【解法一】
- 找第k大的东西(密码,uva 1262)
- UVA - 1262 Password
- UVa1262 - Password(暴力枚举)
- Password UVA - 1262(组合数)
- UVA 1262 Password
- 【暑假】[数学]UVa 1262 Password