CF423div2-C

来源:互联网 发布:湖南棋牌app源码 编辑:程序博客网 时间:2024/05/29 12:28

题意:给你一些子字符串猜字符串

题解思路:路径压缩去找最右边没有被使用过的字符赋上字符即可

#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int mx = 3e6+5;int p[mx];char s[mx];char str[mx];int find(int x){    return p[x] == x?x:p[x] = find(p[x]);}int main(){    int n,m,pos;    for(int i = 0; i < mx; i++)        p[i] = i;    memset(s,0,sizeof(s));    int MAXN = 0;    scanf("%d",&n);    while(n--){        scanf("%s",str);        scanf("%d",&m);        int len = strlen(str);        while(m--){            scanf("%d",&pos);            pos--;            MAXN = max(MAXN,pos+len);            for(int i = find(pos); i-pos<len; i = p[i] = find(i+1))                s[i] = str[i-pos];        }    }    for(int i = 0; i < MAXN; i++)        if(s[i] == 0)            putchar('a');        else            printf("%c",s[i]);    printf("\n");    return 0;}