423C

来源:互联网 发布:淘宝发货地址不一样 编辑:程序博客网 时间:2024/06/04 19:56
题意:告诉你一些字符串的信息,要求你重组并输出字典序最小的这个字符串,告诉你的信息是,某个子串在某几个位置出现,保证给的信息不冲突 

解答:暴力!但是!要注意重复地位置要跳过,不然会超时!

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string.h>#include<cmath>const int MAXN = 2000100;char s[MAXN];int ss[MAXN];using namespace std;int main(){    int n;    while(~scanf("%d",&n))    {        memset(ss,0,sizeof(ss));        int m;        int l = 0;        char tmp[MAXN];        while(n--)        {            scanf("%s",tmp);            int len = strlen(tmp);            scanf("%d",&m);            int t;            int tt = -len;            while(m--)            {                scanf("%d",&t);                for(int i = max(0,tt+len-t);i < len;i++)                {                    if(ss[i+t-1])                        continue;                    ss[i+t-1] = 1;                    s[i+t-1] = tmp[i];                }                tt = t;                if(m==0)                    l = max(len + t - 1,l);            }        }        for(int i = 0;i < l;i++)        {            if(ss[i] == 0)                printf("a");            else                printf("%c",s[i]);        }        printf("\n");    }    return 0;}