这个题仍然是BFS搜索题,其题目的测试数据可能很大(最开始用long long 都过不了),所以采用比较巧妙的链式方法(参考了下网上其他人的做法),最后AC~受教了!
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100001;
struct node
{
int val;
int res;
int pre;
}q[maxn];
int n,m,num[11];
bool vis[5000];
void Output(int index)
{
if(q[index].pre==-1)
return;
Output(q[index].pre);
printf("%d",q[index].val);
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(vis,0,sizeof(vis));
scanf("%d",&m);
for(int i=0;i<m;i++)
scanf("%d",&num[i]);
if(n==0)
{
printf("0\n");
continue;
}
sort(num,num+m);
int pre=0,last=0;
q[last].val=0;
q[last].res=0;
q[last++].pre=-1;
int ans=-1;
while(pre<last)
{
for(int i=0;i<m;i++)
{
q[last].res=q[pre].res*10+num[i];
q[last].pre=pre;
q[last].val=num[i];
int res=q[last].res%n;
if(q[last].res&&!res)
{
ans=last;
break;
}
if(vis[res])
continue;
q[last].res=res;
vis[res]=1;
last++;
}
pre++;
if(ans!=-1)
break;
}
if(ans==-1)
printf("0\n");
else
{
Output(ans);
printf("\n");
}
}
return 0;
}