与同学对拍过,但一交就错
#include
#include
#include
#include
#include
#include
using namespace std;
struct f1
{
int d[101],s,t;
}f[10000],a;
int i,j,k,n,m,b[15],r;
bool fl[5050],flag;
void cale(int i)
{
int r=a.t;
if(a.d[r]>999) {a.t++;a.d[r+1]=a.d[r]/1000;}
for(j=r;j>=1;j--)
{
a.d[j]=(a.d[j]*10+a.d[j-1]/1000)%10000;
}
a.d[1]+=i;
}
void bfs()
{
int l=1,i;
while(l<=r)
{
for(i=1;i<=m;i++)
{
a=f[l];
a.s=(a.s*(10%n)%n+b[i]%n)%n;
if(!fl[a.s])
{
fl[a.s]=true;
cale(b[i]);
r++;
f[r]=a;
}
if(a.s==0)
{
cout<
for(int u=a.t-1;u>=1;u--)
{
k=999;
while(a.d[u]<k)
{
cout<<'0';
k/=10;
}
printf("%d",a.d[u]);
}
flag=true;
cout<<endl;
return;
}
}
l++;
}
}
void qsort(int l,int r)
{
int i=l,j=r,x=b[(l+r)/2];
while (i<=j)
{
while (b[i]
while (b[j]>x) j--;
if (i<=j)
{
k=b[i];b[i]=b[j];b[j]=k;
i++;j--;
}
}
if (i<r) qsort(i,r);
if (l<j) qsort(l,j);
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
r=0;
for(i=1;i<=m;i++)
{
scanf("%d",&b[i]);
if(b[i]==n) {cout<<n<<endl; continue;}
}
if(n==0) {cout<<n<<endl; continue;}
qsort(1,m);
flag=false;
for(i=1;i<10000;i++)
{
f[i].s=f[i].t=0;
memset(f[i].d,0,sizeof(f[i].d));
}
memset(fl,false,sizeof(fl));
for(i=1;i<=m;i++)
if(b[i]!=0)
{r++;f[r].d[1]=b[i];f[r].s=b[i]%n;f[r].t=1; fl[f[r].s]=true;}
bfs();
if(!flag) cout<<0<<endl;
}
return 0;
}