题意:给出m个数字,要求组合成能够被n整除的最小十进制数。

分析:用到了余数判重,在这里我详细的解释了。其它就没有什么了。

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<queue>
  5. #include<algorithm>
  6. using namespace std;
  7.  
  8. const int MAXN=;
  9. const int N=;
  10.  
  11. struct Node{
  12. int pre;
  13. int r;
  14. int d;
  15. };
  16.  
  17. int vis[MAXN];
  18. int num[N];
  19. int n,c,m;
  20. Node q[MAXN];
  21.  
  22. void print(int x)
  23. {
  24. if(q[x].pre==-)
  25. return ;
  26. print(q[x].pre);
  27. printf("%d",q[x].d);
  28. }
  29.  
  30. int bfs()
  31. {
  32. memset(vis,,sizeof(vis));
  33. int dl,dr;
  34. dl=dr=;
  35. Node u,v;
  36. u.pre=-;
  37. u.d=;
  38. u.r=;
  39. q[dr++]=u;
  40. vis[]=;
  41.  
  42. int ok=;
  43. while(dl<dr)
  44. {
  45. u=q[dl++];
  46. for(int i=;i<m;i++)
  47. {
  48. int r=u.r*+num[i];
  49. if(r>=n&&r%n==){
  50. print(dl-);
  51. printf("%d\n",num[i]);
  52. return ;
  53. }
  54. r=r%n;
  55. if(!vis[r]){
  56. vis[r]=;
  57. v.r=r;
  58. v.d=num[i];
  59. v.pre=dl-;
  60. q[dr++]=v;
  61. }
  62. }
  63. }
  64. return -;
  65. }
  66.  
  67. int main()
  68. {
  69. int T;
  70. while(~scanf("%d%d",&n,&m))
  71. {
  72. memset(num,-,sizeof(num));
  73. for(int i=;i<m;i++)
  74. scanf("%d",&num[i]);
  75. sort(num,num+m);
  76.  
  77. if(n==)
  78. printf("0\n");
  79. else{
  80. int ans=bfs();
  81. if(ans==-)
  82. printf("0\n");
  83. }
  84. }
  85. return ;
  86. }

poj 1465 Multiple(bfs+余数判重)的更多相关文章

  1. hdu 1226 bfs+余数判重+大数取余

    题目: 超级密码 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. POJ 1465 Multiple (BFS,同余定理)

    id=1465">http://poj.org/problem?id=1465 Multiple Time Limit: 1000MS   Memory Limit: 32768K T ...

  3. hdu 1226 超级密码(bfs+余数判重)

    题意:略过 分析:用m个数字组成一个能够被n整除的c进制数的最小值,实际上本题的关键就在于这个最小值上.  首先确定我们的思路是从小到大寻找.先查看一位数,即查看着m个数字是否能被n整除:若不能,就查 ...

  4. hdu1664 bfs+余数判重

    input n 不超过50个例子,n==0结束输入 Sample Input 7 15 16 101 0 output 最少个不同数字的n的倍数的x,若不同数字个数一样,输出最小的x Sample O ...

  5. hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)

    Walk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  6. Keyboarding (bfs+预处理+判重优化)

    # #10030. 「一本通 1.4 练习 2」Keyboarding [题目描述] 给定一个 $r$ 行 $c$ 列的在电视上的"虚拟键盘",通过「上,下,左,右,选择」共 $5 ...

  7. Hdu2437-Jerboas(取余数判重搜索)

    Jerboas are small desert-living animals, which resemble mice with a long tufted tail and very long h ...

  8. POJ 3050 枚举+dfs+set判重

    思路: 枚举+搜一下+判个重 ==AC //By SiriusRen #include <set> #include <cstdio> using namespace std; ...

  9. poj 1426 Find The Multiple (bfs 搜索)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18012   Accepted: 729 ...

随机推荐

  1. ARM 汇编指令

    ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...

  2. java实现音频转换

    这里需要用到第三方 ffmpeg.exe package com.convertaudio; import java.io.File;import java.util.ArrayList;import ...

  3. linux c截断文件

    http://www.cnblogs.com/zhuxiongfeng/archive/2010/08/24/1807505.html

  4. iOS开发--Bison详解连连支付集成简书

    "最近由于公司项目需要集成连连支付,文档写的不是很清楚,遇到了一些坑,因此记录一下,希望能帮到有需要的人." 前面简单的集成没有遇到什么坑,在此整理一下官方的集成文档,具体步骤如下 ...

  5. Emmet语法介绍

    例子: (div+p#test>span.test2.test3)*5+p[name="hello"]>div.test4^a*5 <div></di ...

  6. 【web性能】让css更简洁、高效

    用了这么多年的CSS,现在才明白CSS的真正匹配原理,不知道你是否也跟我一样?   看1个简单的CSS: DIV#divBox p span.red{color:red;},按习惯我们对这个CSS 的 ...

  7. 科普:WiFi是谁申请的专利?高通吗?错!

    你给Wi-Fi交过专利费吗?你知道Wi-Fi是谁申请的专利吗? 答:肯定是高通! 错! Wi-Fi技术由澳洲政府的研究机构CSIRO在90年代发明并于1996年在美国成功申请了无线网技术专利.(US ...

  8. CentOS下判断自己的VPS是OpenVZ的还是Xen的

    一般来说,VPS的虚拟化技术,有Xen.OpenVZ.Xen HVM和VMware这几种,那么,如何判断自己的VPS是基于哪种虚拟化技术的呢? 1.执行:ls /proc/命令,一般Xen的VPS,/ ...

  9. iOS:核心动画具体的类和协议的介绍

    核心动画类:CAAnimation.CAPropertyAnimation.CABasicAnimation.CAKeyframeAnimation.CATransition.CAAnimationG ...

  10. 共有19款Java 文件上传组件开源软件

    http://www.oschina.net/project/tag/139/fileupload?lang=19&sort=view