Codeforces Round #423 (Div. 2) C String Reconstruction 并查集
来源:互联网 发布:python 打包 发布网站 编辑:程序博客网 时间:2024/05/21 05:56
CF传送门
题意:
1. Lvan的字符串被Julia藏起来了,要你根据线索还原最小字典序的原字符串
2. 线索是知道原串的子串在原串的位置
题解:
1. 把子串一个一个地还原(赋值)回去,最终没有被还原地部分全部填充‘a’
2. 还原过程要维护一个并查集,避免重复赋值(超时,超时,超时)
3. 简单来说这个并查集有点像一条的单向链表(用数组实现)
4. 最后记得在串尾加上结束符'\0'(char类型字符数组)
5. 为了赋值方便,这里抛弃字符串str的第一个字符str[0],从1开始还原不容易错漏
以下是我的AC代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn=2e6+10; //子串的最远距离1e6,子串最长1e6,所以……int f[maxn];char ss[maxn],str[maxn];int setfind(int x){ //维护并查集,找到还没有补的点 return x==f[x]?x:f[x]=setfind(f[x]);}int main(){ for(int i=0;i<maxn;i++) //初始化并查集 f[i]=i; memset(str,'a',sizeof(str)); //初始化还原字符串 int n,num,kase,maxnum=0; scanf("%d",&n); while(n--){ scanf("%s%d",ss,&num); int len=strlen(ss); while(num--){ scanf("%d",&kase); maxnum=max(maxnum,kase+len); for(int i=setfind(kase);i<kase+len;i=f[i]=setfind(i+1)) //维护并查集,避免重复赋值,浪费时间 str[i]=ss[i-kase]; } } str[maxnum]='\0'; //字符串结束符 puts(str+1); //抛弃第1个字符 return 0;}
阅读全文
0 0
- Codeforces Round #423 (Div. 2) C String Reconstruction 并查集
- Codeforces Round #423 (Div. 2) C. String Reconstruction(字符串)
- Codeforces Round #423 (Div. 2) C. String Reconstruction
- Codeforces Round #423 (Div. 2) C. String Reconstruction(思维 模拟)
- Codeforces #423-Div. 2-C. String Reconstruction
- Codeforces 828C String Reconstruction【思维+并查集】
- Codeforces Round #423 (Div. 2) C. String Reconstruction思维 D. High Load 构造
- Codeforces Round #423 C. String Reconstruction
- Codeforces Round #423 C. String Reconstruction
- Codeforces Round #376 (Div. 2) C 并查集
- Codeforces Round #376 (Div. 2) C dfs+并查集
- Codeforces Round #376 (Div. 2) C. Socks && 731 C 详解(并查集)
- Codeforces Round #376 (Div. 2) C. Socks (并查集维护)
- Codeforces Round #385 (Div. 2) -- C. Hongcow Builds A Nation(并查集)
- Codeforces Round #395 (Div. 2) -- C. Timofey and a tree(并查集+缩点)
- Codeforces Round #250 (Div. 2)(B,C,D并查集)
- Codeforces Round #170 (Div. 2)---C. Learning Languages(并查集)
- Codeforces Round #376 (Div. 2) C. Socks 并查集+贪心、图论
- Redis数据类型常用指令
- Java数组 及应用范例
- SEL和selector的简单使用
- C/C++:判断第一个数是不是第二个数的倍数。
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(十五)
- Codeforces Round #423 (Div. 2) C String Reconstruction 并查集
- POJ 3126 Prime Path
- DEEPIN下搭建FTP服务器步骤(备忘录)(转)
- Codeforces 2A: Winner【STL】【模拟】
- java.lang.SecurityException: No permission to write APN settings问题的定位小结
- View注入
- 欢迎使用CSDN-markdown编辑器
- 图像处理之像素格效果
- Android开发中遇到的坑