题意:
xx之前有一个字符串,但是他弄丢了,他只记得字符串的某些子串分别在哪些位置。
你要帮他把字符串还原长度最少并且字典序最小
题解:
诶呀!!!!本来过了的,第二天起来发现超时了,,,,,,,,
我写个for嵌套竟然两个for都是i 卧槽,这都能过到 tset 8.
真想给自己一波666.
首先把整个答案串全部赋值为"aaaaa.......";
然后按要求依次向后放就行了。你要考虑到,同一个字符串多次位置,每次开始你max(上次末尾+1,新的位置);
否则会超时吧。
#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
const int maxn=2e6+5;
char a[maxn];
char ans[maxn];
int pos[maxn],x;
int main(){
int n,t,ed=0,cnt=0,d=0;
scanf("%d",&t);
memset(ans,'a',sizeof(ans));
while(t--){
scanf("%s",a+1);
scanf("%d",&n);
int len=strlen(a+1);
for(int i=1;i<=n;++i){
scanf("%d",&pos[i]);
}//sort(pos+1,pos+n+1);
int s=0;
ed=0;
for(int i=1;i<=n;++i){
ed=max(pos[i]+len-1,ed);
int st=max(s+1,pos[i]);
for(int j=st;j<pos[i]+len;++j){
ans[j]=a[j-pos[i]+1];
}
s=ed;
}
d=max(d,ed);
}
for(int i=1;i<=d;++i)
printf("%c",ans[i]);
puts("");
return 0;
}