#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<string>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=20+5;
int done[5005],n,type,m,i,win;
int da[17];
struct node
{
int key,pre,yu,place;
}p[100000];
void showpath(int id)
{
if(!id)return ;
showpath(p[id].pre);
if(p[id].key>=10)printf("%c",p[id].key-10+'A');
else printf("%d",p[id].key);
}
void bfs()
{
win=0;
queue<int>q;
memset(done,0,sizeof(done));
int cnt=0;
p[0].pre=-1;
p[0].yu=0;
p[0].place=0;
q.push(cnt++);
while(!q.empty())
{
int id=q.front();q.pop();
if(p[id].place==500)return ;
for(i=0;i<m;i++)
{
if(p[id].yu==0&&da[i]==0)continue;
int yu=(p[id].yu*type+da[i])%n;
if(done[yu])continue;
if(yu==0)
{
win=1;
showpath(id);
if(da[i]>=10)printf("%c\n",da[i]-10+'A');
else printf("%d\n",da[i]);
return ;
}
done[yu]=1;
p[cnt].key=da[i];
p[cnt].yu=yu;
p[cnt].pre=id;
p[cnt].place=p[id].place+1;
q.push(cnt++);
}
}
}
int main()
{
int N;char c,s[3];
//freopen("123.txt","r",stdin);
cin>>N;
while(N--)
{
scanf("%d%d%d",&n,&type,&m);
gets(s);
for(i=0;i<m;i++)
{
scanf("%c%*c",&c);
if(c>='A'&&c<='Z')da[i]=10+c-'A';
else da[i]=c-'0';
}
sort(da,da+m);
while(da[m-1]>=type)
{
m--;
if(!m)break;
}
if(!m){printf("give me the bomb please\n");continue;}
if(n==0)
if(da[0]==0){printf("0\n");continue;}
else {printf("give me the bomb please\n");continue;}
bfs();
if(!win)printf("give me the bomb please\n");
}
return 0;
}
HDU1226超级密码(宽搜+记忆化搜索)
最新推荐文章于 2022-03-23 22:55:48 发布