Codeforces Round #423 (Div. 2) C. String Reconstruction(思维 模拟)
2017-07-12 12:30
1011 查看
题意:给你一些字符串,并告诉你他出现在哪些位置(可多次,可重叠),让你输出字典序最小的可能的字符串。保证有解,总长
度不超过1e6.
思路:跟前几天做的一个题很像点击打开链接,因为区间长度就1e6,经常会重复去填充,浪费时间,可以用一个数组维护当前位置
的下一个未填充的字符位置,这样就可以跳过很多重复操作降到O(n)复杂度了。
代码:
度不超过1e6.
思路:跟前几天做的一个题很像点击打开链接,因为区间长度就1e6,经常会重复去填充,浪费时间,可以用一个数组维护当前位置
的下一个未填充的字符位置,这样就可以跳过很多重复操作降到O(n)复杂度了。
代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 1e7+5; char str[maxn], ans[maxn]; int nex[maxn], n, k; int main(void) { while(cin >> n) { memset(ans, 0, sizeof(ans)); int e = 0; for(int i = 1; i < maxn; i++) nex[i] = i+1; while(n--) { scanf(" %s %d", str, &k); int len = strlen(str); while(k--) { int st; scanf("%d", &st); e = max(e, st+len-1); int p = st; while(p < st+len) { ans[p] = str[p-st]; int t = p; p = nex[p]; nex[t] = st+len; } } } for(int i = 1; i <= e; i++) { if(!ans[i]) printf("a"); else printf("%c", ans[i]); } puts(""); } return 0; }
相关文章推荐
- Codeforces Round #180 (Div. 2) A. Snow Footprints 【思维+模拟】
- Codeforces Round #434(div2)B-模拟&思维&读题-Which floor?
- Codeforces Round #350 (Div. 2) E 思维模拟
- Codeforces Round #408 (Div. 2) 思维,模拟,DP, 多点BFS
- Codeforces Round #360 (Div. 2) 前三题题解【简单模拟+思维+二分图判定二分染色】
- Codeforces Round #354 (Div. 2) B. Pyramid of Glasses (模拟+思维)
- Codeforces Round #386 (Div. 2)C. Tram(模拟+思维)
- Codeforces Round #427 (Div. 2) E. The penguin's game(交互+思维+二分)
- CF - 782D. Innokenty and a Football League - 模拟+思维+贪心+dfs插入
- 【2015-2016 ACM-ICPC Pacific Northwest Regional Contest (Div 1)H】【迭代 排序 模拟】Hilbert Sort 图形拐拐划分,经过所有点的
- DIV模拟弹出窗口(支持拖动)
- Codeforces Round #334 (Div. 2) D. Moodular Arithmetic 思维
- Codeforces Beta Round #96 (Div. 2) (模拟)
- Codeforces Round #249 (Div. 2) (模拟)
- TopCoder SRM 655 Div2 Problem 500 - FoldingPaper2 (思维)
- Codeforces Round #419 (Div. 2) C.Karen and Game 思维
- Codeforces Round #386(Div. 2)C. Tram【思维】
- Codeforces Round #387(Div. 2)B. Mammoth's Genome Decoding【模拟】
- codeforces-746【思维】【模拟】
- Codeforces Round #457 (Div. 2) A. Jamie and Alarm Snooze简单模拟