Multiple(poj1465)
| Time Limit: 1000MS | Memory Limit: 32768K | |
| Total Submissions: 7183 | Accepted: 1540 |
Description
Input
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
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)的更多相关文章
- ACM/ICPC 之 BFS范例(ZOJ2913-ZOJ1136(POJ1465))
通过几道经典BFS例题阐述BFS思路 ZOJ2913-Bus Pass 题意:找一个center区域,使得center到所有公交线路最短,有等距的center则输出id最小的. 题解:经典的BFS,由 ...
- 【BFS】【余数剪枝】Multiple
[poj1465]Multiple Time Limit: 1000MS Memory Limit: 32768K Total Submissions: 7731 Accepted: 1723 ...
- 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 ... 这个错误是因为有两个相 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- [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 ...
- SharePoint "System.Data.SqlClient.SqlException (0x80131904): Parameter '@someColumn' was supplied multiple times.“
最近在处理SharePoint Office365的相关开发的时候发现了这样一个奇怪的现象: 无法通过API更新Editor field,只要已更新就会throw Exception,由于是Offic ...
- 2012Chhengdu K - Yet Another Multiple Problem
K - Yet Another Multiple Problem Time Limit:20000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- JAVA实现AES 解密报错Input length must be multiple of 16 when decrypting with padded cipher
加密代码 /**解密 * @param content 待解密内容 * @param password 解密密钥 * @return */ public static byte[] decrypt(b ...
- 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") ...
随机推荐
- 【模板】一般图最大匹配(带花树算法)/洛谷P6113
题目链接 https://www.luogu.com.cn/problem/P6113 题目大意 给定一个 \(n\) 个点 \(m\) 条边的无向图,求该图的最大匹配. 题目解析 二分图最大匹配,一 ...
- javaWeb - 1 — servlet — 更新完毕
1.先来聊一些javaWeb相关的知识 简单了解一下:web的发展史 1).web就是网页的意思嘛 2).web的分类 (1).静态web 使用HTML.CSS技术,主要包括图片和文本 优点:简单,只 ...
- CPU如何同时运行多个进程?
1 # -*- coding: utf-8 -*- 2 import re 3 mem = [x for x in re.split('[\r|\n]', ''' 4 store a 1 5 add ...
- 利用python代码获取文件特定的内容,并保存为文档
说明:有段时间需要读取上百个文件的单点能(sp),就写了下面的代码(计算化学狗努力转行中^-^) import os.path import re # 1 遍历指定目录,显示目录下的所有文件名 def ...
- eclipse上安装 windowBuilder方法
最近因为需要用java Swing做一些组件设计,但想想以前在大学时候为了布局组件和位置设计花了很多时间.所以再网上查了一些带有可视化的设计插件用来提高工作效率. 其中一个是 windowBuilde ...
- Win7部署Yapi
1.安装node 下载地址:https://nodejs.org/zh-cn/download/ (win7要下载v12.16之前的版本) 安装目录在D:\nodejs,配置地址(文件目录不能有特殊符 ...
- 【Java 8】Stream通过reduce()方法合并流为一条数据示例
在本页中,我们将提供 Java 8 Stream reduce()示例. Stream reduce()对流的元素执行缩减.它使用恒等式和累加器函数进行归约. 在并行处理中,我们可以将合并器函数作为附 ...
- eclipse.ini配置 vmargs 说明
-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M 1. 各个参数的含义什么? 参数中-vmargs的意思是设置JVM参数, ...
- Vuejs-网络
1.axios是什么 是基于promise用于浏览器和node.js的http客户端一个js库,基于Promise这点要好好理解一下. 2.特点 支持浏览器和node.js 支持promise 能拦截 ...
- java中子类继承父类什么?
1.继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包: 2.继承默认权限修饰符修饰的属性和方法,前提是子类和父类在同一个包.