codeforces contest 868 problem D(玄学)
2017-10-06 17:17
357 查看
D. Huge Strings
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given n strings
s1, s2, ..., sn consisting of characters
0 and 1.
m operations are performed, on each of them you concatenate two existing strings into a new one. On the
i-th operation the concatenation
saisbi is saved into a new string
sn + i (the operations are numbered starting from
1). After each operation you need to find the maximum positive integer
k such that all possible strings consisting of
0 and 1 of length
k (there are 2k such strings) are substrings of the new string. If there is no such
k, print 0.
Input
The first line contains single integer n (1 ≤ n ≤ 100) — the number of strings. The next
n lines contain strings
s1, s2, ..., sn (1 ≤ |si| ≤ 100), one per
line. The total length of strings is not greater than 100.
The next line contains single integer m (1 ≤ m ≤ 100) — the number of operations.
m lines follow, each of them contains two integers
ai abd
bi (1 ≤ ai, bi ≤ n + i - 1) — the
number of strings that are concatenated to form sn + i.
Output
Print m lines, each should contain one integer — the answer to the question after the corresponding operation.
Example
Input
Output
Note
On the first operation, a new string "0110" is created. For
k = 1 the two possible binary strings of length
k are "0" and "1", they are substrings of the new string. For
k = 2 and greater there exist strings of length
k that do not appear in this string (for
k = 2 such string is "00"). So the answer is
1.
On the second operation the string "01100" is created. Now all strings of length
k = 2 are present.
On the third operation the string "1111111111" is created. There is no zero, so the answer is
0.
题意:求一个只包含0/1的字符串中 的最大的k ,k所有 2^k个01集合
解:这种一看题目就感觉不能做的题目 竟然用模拟就能水过。。。
玄学操作:当字符串的长度超过1000时只取首尾各500各字符,大神说这是概率。。。(总结 :大力出奇迹 暴力小范围xjb莽一发 可能可以水过)
正解是分治:http://blog.csdn.net/sinat_35406909/article/details/78162440
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given n strings
s1, s2, ..., sn consisting of characters
0 and 1.
m operations are performed, on each of them you concatenate two existing strings into a new one. On the
i-th operation the concatenation
saisbi is saved into a new string
sn + i (the operations are numbered starting from
1). After each operation you need to find the maximum positive integer
k such that all possible strings consisting of
0 and 1 of length
k (there are 2k such strings) are substrings of the new string. If there is no such
k, print 0.
Input
The first line contains single integer n (1 ≤ n ≤ 100) — the number of strings. The next
n lines contain strings
s1, s2, ..., sn (1 ≤ |si| ≤ 100), one per
line. The total length of strings is not greater than 100.
The next line contains single integer m (1 ≤ m ≤ 100) — the number of operations.
m lines follow, each of them contains two integers
ai abd
bi (1 ≤ ai, bi ≤ n + i - 1) — the
number of strings that are concatenated to form sn + i.
Output
Print m lines, each should contain one integer — the answer to the question after the corresponding operation.
Example
Input
5 01 10 101 11111 0 3 1 2 6 5 4 4
Output
1 2 0
Note
On the first operation, a new string "0110" is created. For
k = 1 the two possible binary strings of length
k are "0" and "1", they are substrings of the new string. For
k = 2 and greater there exist strings of length
k that do not appear in this string (for
k = 2 such string is "00"). So the answer is
1.
On the second operation the string "01100" is created. Now all strings of length
k = 2 are present.
On the third operation the string "1111111111" is created. There is no zero, so the answer is
0.
题意:求一个只包含0/1的字符串中 的最大的k ,k所有 2^k个01集合
解:这种一看题目就感觉不能做的题目 竟然用模拟就能水过。。。
玄学操作:当字符串的长度超过1000时只取首尾各500各字符,大神说这是概率。。。(总结 :大力出奇迹 暴力小范围xjb莽一发 可能可以水过)
正解是分治:http://blog.csdn.net/sinat_35406909/article/details/78162440
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <bits/stdc++.h> using namespace std; const int N = 1e6+10; typedef long long LL; string str[210]; int ans[210]; int solve(int k) { for(int i=10; i>=1; i--) { int flag=0; for(int h=0; h<(1<<i); h++) { string s=""; for(int j=0; j<i; j++) { if(h&(1<<j)) s+="1"; else s+="0"; } if(str[k].find(s)==str[k].npos) { flag=1; break; } } if(!flag) return i; } return 0; } int main() { int n, m; memset(ans,0,sizeof(ans)); scanf("%d", &n); for(int i=1; i<=n; i++) cin>>str[i]; scanf("%d", &m); for(int i=n+1; i<=n+m; i++) { int x, y; scanf("%d %d", &x, &y); str[i]=str[x]+str[y]; if(str[i].length()>1000) str[i]=str[i].substr(0,500)+str[i].substr(str[i].length()-500,500); ans[i]=max(solve(i),max(ans[x],ans[y])); printf("%d\n",ans[i]); } return 0; }
相关文章推荐
- codeforces contest 868 problem C(补集 状压)
- codeforces contest 343 problem D(线段树+dfs序)
- Codeforces contest 311 problem E. Biologist(最大权闭合子图)
- codeforces contest 785 problem E(分块)
- Codeforces Round #438 A+B+C Contest 868
- codeforces com contest 855 problem D(数位DP)
- Codeforces Gym 100610 Problem E. Explicit Formula 水题
- Codeforces Round 261 Div.2 D Pashmak and Parmida&#39;s problem --树状数组
- Codeforces Round #253 (Div. 2), problem: (B)【字符串匹配】
- Codeforces Round #FF (Div. 2) Problem B DZY Loves Strings
- codeforces.com/contest/805
- codeforces contest 353
- Codeforces Problemset 212D(VK Cup 2012 Finals (unofficial online-version))
- Codeforces Problem 711C Coloring Trees(DP)
- Codeforces Round #144 (Div. 1), problem: (B) Table DP 组合数学
- B - Valera and Contest CodeForces - 369B
- Codeforces Problem 712A Memory and Crow(公式推导)
- D - Noldbach problem CodeForces - 17A
- Codeforces Round #327 (Div. 1), problem: (A) Median Smoothing
- Problem F CodeForces 16E