Multiple
Time Limit: 1000MS   Memory Limit: 32768K
Total Submissions: 7183   Accepted: 1540

Description

a program that, given a natural number N between 0 and 4999 (inclusively), and M distinct decimal digits X1,X2..XM (at least one), finds the smallest strictly positive multiple of N that has no other digits besides X1,X2..XM (if such a multiple exists).

Input

The input has several data sets separated by an empty line, each data set having the following format:


On the first line - the number N

On the second line - the number M

On the following M lines - the digits X1,X2..XM.

Output

For
each data set, the program should write to standard output on a single
line the multiple, if such a multiple exists, and 0 otherwise.



An example of input and output:

Sample Input

22
3
7
0
1 2
1
1

Sample Output

110
0
题意:用下面所给的数字这些数构成的数字中找到是k的最小的倍数,每个数能用多次。
思路:bfs;
首先如果k为0的时候需要特判,然后将所给的数按升序排列,然后BFS的时候就能保证先被广搜到的数小。
然后这样会爆,所以需要剪枝。
我们要找的是k的倍数,那么这个数modk=0;然后看到k的范围很小。
假如两个数A,B;
A=n*k+s;B=m*k+s;
也就是A=B(modk);那么当这两数去搜下一层的时候,A*10+b[i];
B*10+b[i];那么这两个数对于k取余相等,所以我们只要将小的数加入队列。那么每个模数在队列中就出现一次就行,队列中的元素最多k个
还有这个数了可能很大,所以用静态数组记录前驱去找数。
C++超时,G++100多MS
  1 #include <cstdio>
2 #include <cstdlib>
3 #include <cstring>
4 #include <cmath>
5 #include <iostream>
6 #include <algorithm>
7 #include <map>
8 #include <queue>
9 #include <vector>
10 #include<set>
11 using namespace std;
12 typedef long long LL;
13 bool flag[6000];
14 int ans[20];
15 set<int>que;
16 set<int>::iterator it;
17 typedef struct pp
18 {
19 int mod;
20 int id;
21 int pre;
22 int digit;
23 pp()
24 {
25 pre=-1;
26 }
27 } ss;
28 ss bns[1000000];
29 int ask[1000000];
30 int cp[2000000];
31 int bfs(int n,int m);
32 int main(void)
33 {
34 int i,j,k;
35 while(scanf("%d",&k)!=EOF)
36 {
37 int n;
38 int m;
39 que.clear();
40 scanf("%d",&n);
41 for(i=0;i<n;i++)
42 {
43 scanf("%d",&cp[i]);
44 }
45 sort(cp,cp+n);
46 ans[0]=cp[0];
47 int uu=cp[0];
48 int t=1;
49 for(i=1;i<n;i++)
50 {
51 if(cp[i]!=uu)
52 {
53 ans[t++]=cp[i];
54 uu=cp[i];
55 }
56 }
57
58 if(k==0)printf("0\n");
59 else
60 {
61 int sum=0;
62 int id=bfs(t,k);
63 if(id==-1)
64 {
65 printf("0\n");
66 }
67 else
68 {
69 while(id!=-1)
70 {
71 ask[sum++]=bns[id].digit;
72 id=bns[id].pre;
73 }
74 for(i=sum-1; i>=0; i--)
75 {
76 printf("%d",ask[i]);
77 }
78 printf("\n");
79 }
80 }
81 }
82 return 0;
83 }
84 int bfs(int n,int m)
85 {
86 int i,j,k;
87 int kk=0;
88 memset(flag,0,sizeof(flag));
89 queue<ss>stc;
90 for(i=0; i<n; i++)
91 {
92 int mod=ans[i]%m;
93 if(!flag[mod]&&ans[i]!=0)
94 {
95 flag[mod]=true;
96 bns[kk].id=kk;
97 bns[kk].mod=mod;
98 bns[kk].pre=-1;
99 bns[kk].digit=ans[i];
100 stc.push(bns[kk]);
101 kk++;
102 }
103 }
104 while(!stc.empty())
105 {
106 ss tt=stc.front();
107 stc.pop();
108 for(i=0; i<n; i++)
109 {
110 int mod=(tt.mod*10+ans[i])%m;
111 if(!flag[mod])
112 {
113 bns[kk].id=kk;
114 bns[kk].pre=tt.id;
115 bns[kk].mod=mod;
116 bns[kk].digit=ans[i];
117 if(mod==0)
118 {
119 return kk;
120 }
121 stc.push(bns[kk]);
122 kk++;
123 flag[mod]=true;
124 }
125 }
126 }
127 return -1;
128 }
												

Multiple(poj1465)的更多相关文章

  1. ACM/ICPC 之 BFS范例(ZOJ2913-ZOJ1136(POJ1465))

    通过几道经典BFS例题阐述BFS思路 ZOJ2913-Bus Pass 题意:找一个center区域,使得center到所有公交线路最短,有等距的center则输出id最小的. 题解:经典的BFS,由 ...

  2. 【BFS】【余数剪枝】Multiple

    [poj1465]Multiple Time Limit: 1000MS   Memory Limit: 32768K Total Submissions: 7731   Accepted: 1723 ...

  3. Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...

    Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ... 这个错误是因为有两个相 ...

  4. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  5. [LeetCode] Read N Characters Given Read4 II - Call multiple times 用Read4来读取N个字符之二 - 多次调用

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...

  6. SharePoint "System.Data.SqlClient.SqlException (0x80131904): Parameter '@someColumn' was supplied multiple times.“

    最近在处理SharePoint Office365的相关开发的时候发现了这样一个奇怪的现象: 无法通过API更新Editor field,只要已更新就会throw Exception,由于是Offic ...

  7. 2012Chhengdu K - Yet Another Multiple Problem

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

  8. JAVA实现AES 解密报错Input length must be multiple of 16 when decrypting with padded cipher

    加密代码 /**解密 * @param content 待解密内容 * @param password 解密密钥 * @return */ public static byte[] decrypt(b ...

  9. scala - multiple overloaded alternatives of method bar define default arguments

    同名同位置默认参数不能overload def bar(i:Int,s:String="a"){} def bar(i:String,s:String="b") ...

随机推荐

  1. 基于《CSAPP第九章 虚拟内存》的思考和总结

    在csapp的描述中,虚拟内存的形象更加具化,虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组,内存充当了磁盘的缓存,粗呢内存的许多概念与SRAM缓存是相似的.虚拟页面有以下三种 ...

  2. LeetCode缺失的第一个正数

    LeetCode 缺失的第一个正数 题目描述 给你一个未排序的整数数组 nums,请你找出其中没有出现的最小的正整数. 进阶:你可以实现时间复杂度为 O(n)并且只使用常数级别额外空间的解决方案吗? ...

  3. Java、Scala获取Class实例

    Java获取Class实例的四种方式 package com.test; /** * @description: TODO * @author: HaoWu * @create: 2020/7/22 ...

  4. Android 实现微信QQ分享以及第三方登录

    集成准备 在微信开放平台创建移动应用,输入应用的信息,包括移动应用名称,移动应用简介,移动应用图片信息,点击下一步,选择Android 应用,填写信息提交审核. 获取Appkey 集成[友盟+]SDK ...

  5. 【阿菜做实践】利用go语言写一个简单的Pow样例

    本篇博客的主要内容是用go写一个简单的Proof-of-Work共识机制,不涉及到网络通信环节,只是一个本地的简单demo.开发IDE用的是JB Golang. 整个项目的文件结构如下: PoWdem ...

  6. Java中的变量,数据类型和运算符

    变量,数据类型和运算符 1.变量是一个数据存储空间的表示,它是储存数据的基本单元. 如何理解这句话,下面用一个表格可以形象的表达: 变量与房间之间的对应关系 房间名称 变量名 房间类型 变量类型 入住 ...

  7. ABP VNext框架基础知识介绍(1)--框架基础类继承关系

    在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...

  8. lnmp环境搭建的总结

    //centos安装php7: http://blog.csdn.net/21aspnet/article/details/47708763//nginx 更改网站根目录 http://blog.cs ...

  9. ciscn_2019_n_8 1

    拿到题目老样子先判断是多少位的程序 可以看到是32位的程序,然后再查看开启的保护 然后将程序放入ida进行汇编 先shift+f12查看程序是否有system和binsh 可以看到有system和bi ...

  10. RabbitMQ,RocketMQ,Kafka 消息模型对比分析

    消息模型 消息队列的演进 消息队列模型 发布订阅模型 RabbitMQ的消息模型 交换器的类型 direct topic fanout headers Kafka的消息模型 RocketMQ的消息模型 ...