UVA 1262

来源:互联网 发布:每次人口普查的数据 编辑:程序博客网 时间:2024/06/05 09:16

【题目分析】
后缀积的使用。


【代码】

#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;vector<char> v[7];char s1[10][10],s2[10][10];int k,n[7];bool init(){    int i,j,x,y,z;    for (i=1;i<=5;i++) v[i].clear();    scanf("%d",&k);    for (i=1;i<=6;i++)      scanf("%s",s1[i]+1);    for (i=1;i<=6;i++)      scanf("%s",s2[i]+1);    for (i=1;i<=5;i++)      for (j=1;j<=6;j++)        for (x=1;x<=6;x++)          if (s1[j][i]==s2[x][i])            v[i].push_back(s1[j][i]);    for (i=1;i<=5;i++)    {        if (v[i].empty()) return 0;        sort(v[i].begin(),v[i].end());        unique(v[i].begin(),v[i].end());        n[i]=0;        while (n[i]<v[i].size()-1&&v[i][n[i]+1]>v[i][n[i]]) n[i]++;        n[i]++;    }    return 1;}void solve(){    int i,j,x,y,z,tot=1;    for (i=1;i<=5;i++)      tot*=n[i];    if (k>tot)    {        printf("NO\n");        return;    }    /*for (i=1;i<=5;i++)    {        tot/=n[i];        j=k/(tot+1);        printf("%c",v[i][j]);        k-=j*tot;    }*/    k--;    for (i=1;i<=5;i++)    {        tot/=n[i];        j=k/tot;        printf("%c",v[i][j]);        k-=j*tot;    }    printf("\n");}int main(){    int T;    scanf("%d",&T);    while (T--)    {        if (!init())        {            printf("NO\n");            continue;        }        solve();    }}
0 0