POJ-1465-Multiple

来源:互联网 发布:辛辛那提音乐学院知乎 编辑:程序博客网 时间:2024/06/06 09:26

这个题仍然是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;}


原创粉丝点击