第一眼看到这个题就想到了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;
}