Password UVA

来源:互联网 发布:java小游戏代码 编辑:程序博客网 时间:2024/05/17 20:34

按照紫书的思路,首先找出对应的每列相同的字母,将这些字母分别存储之后,计算对应的数量,然后输出即可,具体实现见如下代码:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>#include<cstdio>#include<deque>#include<functional>using namespace std;int main(){int T,K;cin >> T;while (T--){cin >> K;char first[6][5];char second[6][5];for (int i = 0; i < 6; i++){for (int j = 0; j < 5; j++){cin >> first[i][j];}}for (int i = 0; i < 6; i++){for (int j = 0; j < 5; j++){cin >> second[i][j];}}set<char> v[5];for (int j = 0; j < 5; j++){for (int ind1 = 0; ind1 < 6; ind1++){for (int ind2 = 0; ind2 < 6; ind2++){if (first[ind1][j] == second[ind2][j]){v[j].insert(first[ind1][j]);break;}}}}int amount[6];bool flag = false;amount[5] = 1;for (int i = 4; i >= 0; i--){amount[i] = amount[i + 1] * v[i].size();if (amount[i] == 0){flag = true;break;}}if (K> amount[0]||flag){cout << "NO\n";continue;}int cur = 0;set<char>::iterator j;for (int i = 0; i < 5; i++){for (j = v[i].begin(); j != v[i].end(); j++){if (cur + amount[i + 1] < K){cur += amount[i + 1];}else break;}cout << *j;}cout << endl;}return 0;}/*3ABDFKOCOOOODOOOOOOOOOOOOOOOOOOABDFKECEEEEDEEEEEEEEEEEEEEEEEE*/

原创粉丝点击