HDU 4474 Yet Another Multiple Problem

来源:互联网 发布:可可通改号系统源码 编辑:程序博客网 时间:2024/06/05 10:26

题面

题意

题意,给出n和m个数,问是否存在一个n的倍数不包含这m个数,如果有则输出最小的,反之输出-1.

方法

BFS,按长度一位一位枚举,首先枚举0~9(能用的数)若还没有数与它除以n同余,就将记录在下标为该余数的数组中,并入队,反之不记录,因为如果存在一个比他先记录下来的数和它同余,那么一定较小且在后续操作中利用价值更高.
每次从队首取出元素,并在它后面加上一个数,若组成的新数除以n的余数也首次出现,则再将余数入队,并记录下新加入的数,再用一个pri数组记录它前面一个数
若队列为空则不存在,若有数取模后为0则根据pri数组一位一位找到那个数并输出.

注意:一开始0不能入队,且要防止输出0.

代码

#include<iostream>#include<cstring>#include<queue>#include<cstdio>using namespace std;int T,n,m,tmp,pri[10010],used[10010],ans[1001000],aa=0;bool nu[10],have;vector<int>num;queue<int>que;int main(){    int i,j,k,p,q;    while(~scanf("%d%d",&n,&m))    {        T++;        have=1;        while(!que.empty()) que.pop();        memset(used,-1,sizeof(used));        memset(nu,0,sizeof(nu));        num.clear();        for(i=1;i<=m;i++)        {            scanf("%d",&p);            nu[p]=1;        }        for(i=0;i<=9;i++)        {            if(nu[i]) continue;            num.push_back(i);            if(used[i%n]==-1&&i)            {                used[i%n]=i;                pri[i%n]=-1;                que.push(i%n);            }        }        printf("Case %d: ",T);        while(!que.empty()&&have)        {            tmp=que.front();            que.pop();            for(i=0;i<num.size();i++)            {                k=tmp*10+num[i];                if(!k) continue;                k%=n;                if(used[k]==-1)                {                    pri[k]=tmp;                    used[k]=num[i];                    que.push(k);                }            }            if(used[0]!=-1)            {                aa=0;                p=0;                while(p!=-1)                {                    aa++;                    ans[aa]=used[p];                    p=pri[p];                }                for(i=aa;i>=1;i--)                {                    printf("%d",ans[i]);                }                printf("\n");                have=0;            }        }        if(have) printf("-1\n");    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米5c照相模糊怎么办 小米5充电很慢怎么办 iphone图库照片没了怎么办 我想通过微信号得到手机号怎么办 给充电宝充电慢怎么办 小米5s充不了电怎么办 百度网盘下载速度慢怎么办 负债累累没有钱没有资源怎么办 好福利密码忘了怎么办 手机无法申请百度网盘怎么办 魅族手机运行慢怎么办 阿里小宝卡流量用完了怎么办 阿里宝卡流量用完了怎么办 百度网盘本地空间不足怎么办 百度网盘空间不足怎么办 百度网盘容量不够怎么办 百度网盘内存不够怎么办 百度网盘储存空间不足怎么办 百度网盘手机号注销了怎么办 手机系统升级后照片没了怎么办 换手机照片没了怎么办 苹果手机icloud满了怎么办 百度网盘密码忘记怎么办 手机卡不用了支付宝账号怎么办 手机校园网不弹出登录界面怎么办 百度云需要邮箱验证怎么办 网页百度网盘不播放视频怎么办 手机qq邮箱中转站容量不足怎么办 qq邮箱容量满了怎么办 手机邮箱中转站容量不足怎么办 微信号登陆要好友验证怎么办 邮箱账号名忘了怎么办 苹果六话筒坏了怎么办 iphone后置摄像头坏了怎么办 苹果8听歌声音小怎么办 酷狗音乐没了怎么办 手机听歌音量小怎么办 苹果手机酷狗音乐打不开怎么办 电脑酷狗音乐打不开怎么办 酷狗音乐无法运行播放怎么办? 酷狗音乐停止运行怎么办