Round #423 C. String Reconstruction(Div.2)
Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun of him and hid the string s. Ivan preferred making a new string to finding the old one.
Ivan knows some information about the string s. Namely, he remembers, that string ti occurs in string s at least k
You are to reconstruct lexicographically minimal string s such that it fits all the information Ivan remembers. Strings ti and string s
The first line contains single integer n (1?≤?n?≤?105) — the number of strings Ivan remembers.
The next n lines contain information about the strings. The i-th of these lines contains non-empty string ti, then positive integer ki, which equal to the number of times the string t
It is guaranteed that the input data is not self-contradictory, and thus at least one answer always exists.
OutputPrint lexicographically minimal string that fits all the information Ivan remembers.
Examples input3output
a 4 1 3 5 7
ab 2 1 5
ca 1 4
abacabainput
1output
a 1 3
aaainput
3output
ab 1 1
aba 1 3
ab 2 3 5
ababab
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 using namespace std; 5 const int INF=0x3f3f3f3f; 6 char s[2000006]; 7 char ch[2000005]; 8 9 int main(){ 10 int n,m,x,tot=0; 11 scanf("%d",&n); 12 for(int i=0;i<n;i++){ 13 scanf("%s%d",&ch,&m); 14 int k=strlen(ch); 15 int t=-INF; 16 for(int i=0;i<m;i++){ 17 scanf("%d",&x); 18 x--; 19 tot=max(x+k,tot); 20 for(int l=max(x,t);l<x+k;l++) 21 s[l]=ch[l-x]; 22 t=x+k; 23 } 24 } 25 for(int i=0;i<tot;i++) 26 if(s[i]==‘\0‘) printf("a"); //‘\0‘ 27 else printf("%c",s[i]); 28 printf("\n"); 29 return 0; 30 }
Round #423 C. String Reconstruction(Div.2)