题意:写一个程序,对于给定的一个自然数N(1≤N≤4999),和M个互不相同的十进制数字X1, X2,…,XM (至少一个), 找出N的一个最小的正的倍数,使得该倍数中没有X1,X2,…,XM 之外的其它数字。
按余数一波bfs就好了。
#include<bits/stdc++.h>
using namespace std;
int n,m,can[20],now[5010],bf[5010];
bool vis[5010];
int print(int nw)
{
if(bf[nw])print(bf[nw]);
printf("%d",now[nw]);
}
void bfs()
{
queue<int>q;int nw,nx;
q.push(0);
while(!q.empty())
{
nw=q.front();q.pop();
if(nw==0&&vis[nw])
{
print(nw);
return;
}
for(int i=1;i<=m;i++)
{
nx=(nw*10+can[i])%n;
if(!vis[nx])
{
if(nx==0&&can[i]==0)continue;
vis[nx]=1,now[nx]=can[i],
bf[nx]=nw,q.push(nx);
}
}
}
puts("0");
return;
}
int main()
{
scanf("%d",&n);
scanf("%d",&m);
for(int i=1;i<=m;i++)
scanf("%d",&can[i]);
sort(can+1,can+m+1);
bfs();
}