a program that, given a natural number N between 0 and 4999 (inclusively), and M distinct decimal digits X1,X2..XM (at least one), finds the smallest strictly positive multiple of N that has no other digits besides X1,X2..XM (if such a multiple exists).
The input file has several data sets separated by an empty line, each data set having the following format:
On the first line - the number N
On the second line - the number M
On the following M lines - the digits X1,X2..XM.
For each data set, the program should write to standard output on a single line the multiple, if such a multiple exists, and 0 otherwise.
An example of input and output:
Input
22
3
7
0
1
2
1
1
Output
110
0
#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
bool visit[5010]; //余数判重
int x[10];
int n;
struct node
{
string num;
int key; //余数
};
queue<node>q;
int m;
int bfs()
{
node h,t;
h.num="";
h.key=0;
q.push(h);
int k;
while (!q.empty())
{
t=q.front();
q.pop();
for (int i=0; i<m; i++)
{
k=t.key*10+x[i];
if(!k)
{
continue;
}
k=k%n;
if(k==0) //找到了
{
cout<<t.num<<(char)(x[i]+'0')<<endl;
return 0;
}
if(!visit[k]) //如果没有出现过这个余数则继续
{
h.num=t.num+(char)(x[i]+'0');
h.key=k;
visit[k]=true;
q.push(h);
}
}
}
return 1; //没找到
}
int main()
{
while (cin>>n)
{
cin>>m;
for (int i=0; i<m; i++)
{
cin>>x[i];
}
sort(x, x+m);
memset(visit, false, sizeof(visit));
while (!q.empty())
{
q.pop();
}
if(!n||bfs())
{
cout<<"0"<<endl;
}
}
return 0;
}