//因为n是小于等于10000可以利用这点进行搜索对n取余则余数为零时就为所找的。因为他的余数肯定小于10000所以不会无休止下去

#include<stdio.h>

#include<string.h>

#include<queue>

#include<iostream>

#include<algorithm>

#define N 1111111

using namespace std;

int pre[N],now[N],a[20];

void find(int k) {

if(pre[k]!=-1) 

find(pre[k]);

printf("%d",now[k]);

}

void bfs(int n) {

int cur,i,j,k,next;

queue<int>q;

for(i=1;i<=9;i++)//判断1位数的情况

if(a[i]==0) {

k=i%n; 

if(k==0)  {

printf("%d\n",i);

return ;

}

if(pre[i]==0) {

pre[i]=-1;

now[i]=i;


q.push(i);

}

}

while(!q.empty()) {

            cur=q.front();

q.pop();

for(i=0;i<=9;i++) 

if(a[i]==0) {

next=cur*10+i;

k=next%n;

if(k==0)  {

 find(cur);

 printf("%d\n",i);

 return ;

}

if(pre[k]==0) {//控制如口如果出现过就肯定不是最小的因为最小的已经加进去过了

pre[k]=cur;//k

now[k]=i;//k

q.push(k);//k的个数是有限的不能用next可能会越界,越界的可能是禁止加入得数组成的数有一些你必须到很大才能遍历完1-10000

}

}

}

  printf("-1\n");

}

int main() {

int n,m,i,j,count=0;

while(scanf("%d%d",&n,&m)!=EOF) {

memset(a,0,sizeof(a));

memset(pre,0,sizeof(pre));

for(i=1;i<=m;i++) {

scanf("%d",&j);

a[j]=1;

}

printf("Case %d: ",++count);

 bfs(n);

 

}

return 0;

}

hdu 4474的更多相关文章

  1. hdu 4474 大整数取模+bfs

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4474 (a*10+b)%c = ((a%c)*10+b%c)%c; 然后从高位开始枚举能填的数字填充, ...

  2. hdu 4474 Yet Another Multiple Problem

    题意: 找到一个n的倍数,这个数不能含有m个后续数字中的任何一个 题解: #include<stdio.h> #include<string.h> #include<qu ...

  3. HDU - 4474 bfs好题

    这个BFS并不是很好想.. 最主要的一点是每个余数只会被拿出来一次更新其他余数, 然后我用d[ i ]表示 到达 i 这个余数最短需要多长,然后从高位往低位贪心,判断成立的时候忘记了如果0被ban掉了 ...

  4. HDU 4474 Yet Another Multiple Problem ( BFS + 同余剪枝 )

    没什么巧办法,直接搜就行. 用余数作为每个节点的哈希值. #include <cstdio> #include <cstring> #include <cstdlib&g ...

  5. HDU 4474 Yet Another Multiple Problem【2012成都regional K题】 【BFS+一个判断技巧】

    Yet Another Multiple Problem Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 65536/65536 K ...

  6. HDU 4474 Yet Another Multiple Problem BFS

    题意:求m的倍数中不包含一些数码的最小倍数数码是多少.比如15 ,不包含0  1 3,答案是45. BFS过程:用b[]记录可用的数码.设一棵树,树根为-1.树根的孩子是所有可用的数码,孩子的孩子也是 ...

  7. 2012Chhengdu K - Yet Another Multiple Problem

    K - Yet Another Multiple Problem Time Limit:20000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  8. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

随机推荐

  1. js数组去重的三种方式的比较

    做前端的,一般实现功能是主要的,但是重中之重却是在做到功能完善的情况下提高性能. 1.遍历数组法 实现的思路:构建一个新的数组存放结果,for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组 ...

  2. canvas 平移&缩放

    1.平移 canvas其实只是一个包装器,真正起着重要作用的部分是2D渲染上下文,这才是我们真正绘制图形的地方. 然而2D渲染上下文是一种基于屏幕的标准绘制平台.它采用屏幕的笛卡尔坐标系统,以左上角( ...

  3. canvas绘制基础

    初始接口 <body> <canvas id=“canvas”></canvas> <script> var canvas = document.get ...

  4. const和volatile

    const是只读变量 const修饰的变量是只读的,其本质还是变量 const修饰的局部变量在栈上分配空间 const修饰的全局变量在全局数据区分配空间 const只在编译期有用,在运行期无用 con ...

  5. 关于对象.style currentstyle 的区别

    对象.style的方式只能获取行内写法的样式,但是外部引入的或者写在head里面的就无法获取,只能用currentstyle.

  6. Python behave in BDD

    BDD概念 全称 Behavior-driven development 中文 行为驱动开发 概念 是敏捷软件开发技术的一种,鼓励各方人员在一个软件项目里交流合作,包括开发人员.测试人员和非技术人员或 ...

  7. Android内存泄露(全自动篇)

    写了可执行文件启动器Launcher.jar及一些批处理,通过它们就可以自动的以一定的时间间隔提取Hprof和进程的内存信息: 一.需要的库 可执行文件启动器:lib\Launcher.jar 注:关 ...

  8. k近邻法(kNN)

    <统计学习方法>(第二版)第3章 3 分类问题中的k近邻法 k近邻法不具有显式的学习过程. 3.1 算法(k近邻法) 根据给定的距离度量,在训练集\(T\)中找出与\(x\)最邻近的\(k ...

  9. ç7—UIViewController

    UIViewController继承了UIResponder,而UIResponder继承了NSObject,UIViewController是所有视图控制器的父类. 在MVC模式中,UIViewCo ...

  10. VW结合rem进行移动端布局

    ---恢复内容开始--- html { font-size:10vw: } div { width: 1rem; height: 1rem; } VW这个单位适合用来适应不同设备的 一个设备的宽度就为 ...