第一眼看到这个题就想到了poj3126Prime Path (题解地址 果然还是自己做出来的题印象深) 但是很不幸的是 ,这个题一个大数取模就把我整蒙了orz 其他的真没啥区别,还多了一个第一位不能是0, 没了……变变样就不会了
/*********** hud1226 2015.12.1 655MS 10424K 2050 B C++ ***********/ #include <iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int T,n,c,m,num[20],vis[5005]; struct node { int s[505],len; }; int mod(node a) { int tem=0; for(int i=0;i<a.len;i++) { tem=(tem*c+a.s[i])%n; } return tem; } void print(node a) { for(int i=0;i<a.len;i++) { if(a.s[i]<=9)printf("%d",a.s[i]); else printf("%c",a.s[i]+'A'-10); } printf("\n"); return ; } int bfs() { queue<node>q; node a; a.len=0; int r; for(int i=1;i<16;i++) { if(!num[i]) continue; a.s[0]=i; a.len=1; r=mod(a); if(!r) { print(a); return 1; } if(!vis[r]) { q.push(a); vis[r]=1; } } while(!q.empty()) { a=q.front(); q.pop(); for(int i=0;i<16;i++) { if(!num[i]) continue; a.s[a.len]=i; a.len++; r=mod(a); if(!r) { print(a); return 1; } if(!vis[r]&&a.len<499) { q.push(a); vis[r]=1; } a.len--; } } return 0; } int main() { // freopen("cin.txt","r",stdin); scanf("%d",&T); char str[2]; while(T--) { scanf("%d%d%d",&n,&c,&m); memset(num,0,sizeof(num)); memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++) { scanf("%s",str); if(str[0]>='0'&&str[0]<='9')num[str[0]-'0']=1; else num[str[0]-'A'+10]=1; } if(n) { int flag=bfs(); if(!flag) printf("give me the bomb please\n"); } else { if(num[0]) printf("0\n"); else printf("give me the bomb please\n"); } } return 0; }