题目链接https://vjudge.net/problem/UVA-1569
题解:
数字范围可能会爆,用vector来进行存储
不能用优先队列,只能将数字都排序然后在进行
AC代码
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
#define N 5100
vector<int>ans[N];
queue<int>q;
int num[N];
int n,m;
int bfs()
{
int n1;
while(!q.empty())
{
n1=q.front();
q.pop();
if(n1==0)
return 1;
for(int i=1;i<=m;++i)
{
int le=(n1*10+num[i])%n;
if(ans[le].size()) continue;
q.push(le);
ans[le]=ans[n1];
ans[le].push_back(num[i]);
}
}
return 0;
}
int main()
{
ios::sync_with_stdio(false);
while(cin>>n>>m)
{
for(int i=0;i<n;++i)
ans[i].clear();
while(!q.empty())
q.pop();
for(int i=1;i<=m;++i)
cin>>num[i];
sort(num+1,num+1+m);
if(n==0)
{
cout<<0<<endl;
continue;
}
for(int i=1;i<=m;++i)
{
if(num[i]==0)
continue;
int le=num[i]%n;
if(ans[le].size()) continue;
q.push(le);
int temp=num[i];
while(temp)
{
ans[le].insert(ans[le].begin(),temp%10);
temp/=10;
}
}
int mark=bfs();
if(mark==0)
cout<<"0"<<endl;
else
{
for(auto pi:ans[0])
cout<<pi;
cout<<endl;
}
}
return 0;
}