UVA 1262 Password

https://vjudge.net/problem/24768/origin

#include<bits/stdc++.h>
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#include<iomanip>
#include<algorithm>
#include<stack>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
vector<char> v[5];
set<char>s1[5];
set<char>s2[5];
int cnt;
int k;
string s;
void dfs(int j)
{
    if(j==5)
    {
        cnt++;
        //cout<<cnt<<":"<<s<<" ";
        if(cnt==k){cout<<s<<endl;return;}
    }
    string temp=s;
    int len=v[j].size();
    for(int i=0;i<len;i++)
    {
        s+=v[j][i];
        dfs(j+1);
        s=temp;
    }
}
int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
#endif // ONLIN
int T;
cin>>T;
    while(T--)
    {
        for(int j=0;j<5;j++)s1[j].clear(),s2[j].clear();
        for(int j=0;j<5;j++)v[j].clear();
        cin>>k;
    char ch;
    for(int i=0;i<6;i++)
        for(int j=0;j<5;j++)
    {
        cin>>ch;
        s1[j].insert(ch);
    }
    for(int i=0;i<6;i++)
        for(int j=0;j<5;j++)
    {
        cin>>ch;
        s2[j].insert(ch);
    }

    for(int j=0;j<5;j++)
    {
        set<char>::iterator it=s1[j].begin();
        while(it!=s1[j].end())
        {
            if(s2[j].count(*it))
            {
                v[j].push_back(*it);
            }
            it++;
        }
    }
    for(int j=0;j<5;j++)sort(v[j].begin(),v[j].end());
    int total=v[0].size()*v[1].size()*v[2].size()*v[3].size()*v[4].size();
    if(k>total)
    {
        cout<<"NO"<<endl;continue;
    }
    s="";
    cnt=0;
    dfs(0);
    }

}
























原文地址:https://www.cnblogs.com/linruier/p/9532580.html