题意:给你n个串,给你每个串在总串中开始的每个位置,问你最小字典序总串。

思路:显然这道题有很多重复填涂的地方,那么这里的时间花费就会特别高。

我们维护一个并查集fa,用fa[i]记录从第i位置开始第一个没填涂的位置,那每次都能跳过涂过的地方。每次填完当前格就去填find(fa[i + 1])。

ps:一定要合并,不然超时。

代码:

#include<stack>
#include<vector>
#include<queue>
#include<set>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define ll long long
#define ull unsigned long long
using namespace std;
const int maxn = 1000000+5;
const int seed = 131;
const int MOD = 100013;
const int INF = 0x3f3f3f3f;
char ans[maxn*10];
int fa[maxn*10];
char s[maxn];
int find(int x){return fa[x] == x? x : fa[x] = find(fa[x]);
}
int main(){int n,t;memset(ans,0,sizeof(ans));scanf("%d",&n);for(int i = 0;i < maxn * 10;i++) fa[i] = i;int end = 1;while(n--){scanf("%s%d",s,&t);int len = strlen(s);while(t--){int x;scanf("%d",&x);end = max(end,x + len - 1);for(int i = find(x);i <= x + len -1;i = find(i + 1)){ans[i] = s[i - x];int fx = find(i);int fy = find(i + 1);if(fx > fy)fa[fy] = fx;elsefa[fx] = fy;}}}for(int i = 1;i <= end;i++)if(ans[i] != 0)printf("%c",ans[i]);else printf("a");printf("\n");return 0;
}

转载于:https://www.cnblogs.com/KirinSB/p/9517004.html

CodeForces 828C String Reconstruction(并查集思想)相关推荐

  1. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction 并查集

    C. String Reconstruction 题目连接: http://codeforces.com/contest/828/problem/C Description Ivan had stri ...

  2. CodeForces - 123A prime permutation(并查集,水题)

    题目链接:点击查看 题目大意:给出一个字符串s,问能否通过重组其字母顺序,从而满足:若字符串下标从1开始,对于每一个质数下标,满足 题目分析:其实在纸上稍微写写画画就能看出个大概的规律,当字符串的长度 ...

  3. CodeForces - 468B Two Sets(并查集+思维)

    题目链接:点击查看 题目大意:现在给出两个集合A和B,再给出两个数a和b,现在规定在集合A中的数x必须满足x和a-x同时在集合a中,而在集合B中的数x也同样需要满足x和b-x同时在集合B中,现在给出一 ...

  4. codeforces 884E Binary Matrix 并查集,滚动数组

    E. Binary Matrix time limit per test 3 seconds memory limit per test 16 megabytes input standard inp ...

  5. Harmonious Graph CodeForces - 1253D(思维+并查集)

    You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to n. The graph ...

  6. Codeforces 1144D Deduction Queries 并查集

    Deduction Queries 用并查集维护前缀的关系, 在同一个联通块内两两之间的异或值都是已知的. 每个点再维护一个和它当前父亲的异或值, 压缩路径的时候更新一下就好了. #include&l ...

  7. Codeforces 371D. Vessels【并查集】

    题目大意: 给出一堆从上到下叠起来的容器,有两种操作:第一种是在编号为i的容器中加入x的水(保证水溢出之后会流到下一个最近的容器(如果存在)中):第二种是查询编号为i的容器中有多少水. 做法: 首先, ...

  8. CodeForces - 371D Vessels 【并查集】

    Vessels 题意: 自上而下的n个碗,向某个碗中倒水,如果溢出,则会流向它之下的下一个未满的碗.有两种操作:1 p x表示往第p个碗中导入x的水,2 p表示询问此时第p个碗中的水量. 题解: 未经 ...

  9. CodeForces - 371D. Vessels(并查集)

    题目链接:http://codeforces.com/problemset/problem/371/D点击打开链接 D. Vessels time limit per test 2 seconds m ...

最新文章

  1. js空对象undefined
  2. 控件联动(三级联动)
  3. git删除分支_程序员必须要掌握的 Git 使用技巧
  4. oracle 天转换成月函数_oracle中to_date详细用法示例(oracle日期格式转换)
  5. 【扯淡】今天看了《写给失眠者的心理学》,下面开始借鉴与脑洞大开
  6. 坐标轨迹计算_【老杨讲坛】737NG无系留最大风速限制的插值计算
  7. 2021牛客寒假算法基础集训营3,签到题DGHIJ
  8. 绝地大逃杀服务器维护多少时间,绝地求生4月12日维护到几点/维护多长时间 绝地求生4.12维护什么时候好/能进游戏...
  9. expect移植到powerPC平台的过程
  10. Linux基础知识全面总结
  11. 热敏打印机ESCPOS指令封装类,票据打印从此轻松,佳博系列实测通过
  12. 【环境搭建】在Ubuntu16.04上搭建Nginx-rtmp流媒体服务器
  13. 用友NC总账辅助余额表与应收应付模块余额表对账技巧
  14. GINI Index-基尼指数
  15. 关于数据恢复,记一次修复SD卡 RAW 之后的修复过程
  16. 蓝牙系统中的主机与控制器
  17. 原腾讯副总裁,Google资深研究员吴军:ChatGPT不算新技术革命,带不来什么新机会...
  18. 2022温州经开区沙城街道办事处招聘编外人员综合试题及答案
  19. 【学术相关】没有痛苦的博士求学经历,是不合格的!一位毕业了三十多名博士的中科院博导感言...
  20. 微信小程序+vant的自定义tabBar

热门文章

  1. TypeScript算法专题 - blog3 - 对TypeScript链表实现中的一些问题总结与改进
  2. 泰安虚拟服务器怎么样,泰安S5353:搭建您最满意的服务器
  3. l2高斯分布_浅谈为什么L2正则化有效
  4. linux未找到make命令,linux中无make命令的问题(make: *** 没有指明目标并且找不到 makefile及make命令安装方法)...
  5. 二元偏导数存在的条件_偏导数连续怎么证明
  6. python框架漏洞_注意!Python中的10个常见安全漏洞及修复方法
  7. 依赖注入有点_12.24 (Core管道amp;中间件amp;依赖注入+琐碎笔记)
  8. oracle lock 1,Oracle試用 DBMS_LOCK.sleep(1);權限問題
  9. fckeditor php 不显示,PHP Fckeditor上传文件(或图片)中文显示为乱码的解决方法
  10. JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)...