• uva1653


    本来想刷道签到题结果被卡住了。这题题意描述有点问题,数字又不一定都是个位数。。。难道是我英语太差了? digits就表示0~9这几个数?唉,还是太弱了。这题就是用了一个bfs,应该说还是有点意思的,直接模拟复杂度肯定爆炸,而且还不好判无解的情况。而bfs复杂度是n*10的,因为%n相同的状态搜索过程都是相同的,相当于一堆循环节,而无解的情况也好判了,状态都搜完后还没有%n为0的就无解了,因为剩下的都是一堆循环节,也不可能搜到解了。

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=10010;
    struct node{
        int m,f,x;
    }q[maxn],A,B;
    int cas,n,m,can[15],head,tail,vis[maxn],flag;
    void print(int x){
        if(!x)return;
        print(q[x].f);
        printf("%d",q[x].x);
    }
    int main(){
        while(scanf("%d%d",&n,&m)!=EOF){
            ++cas;flag=0;int x;
            memset(vis,0,sizeof(vis));
            memset(can,0,sizeof(can));
            for(int i=1;i<=m;++i){
                scanf("%d",&x);can[x]=1;
            }
            printf("Case %d: ",cas);
            head=tail=0;
            for(int i=1;i<=9;++i)if(!can[i]){
                A.m=i%n;A.x=i;A.f=0;
                if(!A.m){printf("%d
    ",i);flag=1;break;}
                if(!vis[A.m]){
                    q[++tail]=A;vis[A.m]=1;
                }
            }
            if(flag)continue;
            while(head<tail){
                B=q[++head];
                for(int i=0;i<=9;++i)if(!can[i]){
                    A.m=(B.m*10+i)%n;
                    A.x=i;A.f=head;
                    if(vis[A.m])continue;
                    vis[A.m]=1;q[++tail]=A;
                    if(!A.m){flag=1;break;}
                }
                if(flag)break;
            }
            if(flag){
                print(tail);printf("
    ");
            }
            else{puts("-1");}
        }
        //system("pause");
        return 0;
    }
    /*
    2345 3
    7 8 9
    100 1
    0
    */
  • 相关阅读:
    MySQL 5.7 Invalid default value for 'CREATE_TIME'报错的解决方法
    浅析mysql中exists 与 in 的使用
    mysql 索引原理
    内存溢出与内存泄漏
    java 内部类详解
    JAVA中重写equals()方法的同时要重写hashcode()方法
    Java中volatile关键字解析
    JDK1.8 HashMap源码分析
    mysql 行转列 列转行
    Java多线程(十)——线程优先级和守护线程
  • 原文地址:https://www.cnblogs.com/dibaotianxing/p/8319896.html
Copyright © 2020-2023  润新知