Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <cstring>
- #include <vector>
- #define nmax 100001
- using namespace std;
- ifstream fin("p.in");
- ofstream fout("p.out");
- int n;
- struct info
- {
- int wh_t;
- int pos;
- };
- vector<struct info>vec;
- string s[nmax];
- char sir_fin[2000001];
- int nr_ch;
- int nr_sir;
- bool cmp(info i1, info i2)
- {
- if(i1.pos==i2.pos)
- if(s[i1.wh_t].size()<s[i2.wh_t].size()) return 1;
- return i1.pos<i2.pos;
- }
- void init()
- {
- for(int i=0; i<nr_ch; i++)
- sir_fin[i]='a';
- }
- void modif(info inf,int prev)
- {
- char sir[nmax];
- //strcpy(sir,s[inf.wh_t].c_str());
- //strcpy(sir_fin+inf.pos-1,sir);
- if(inf.pos>prev)
- for(int i=0; i<s[inf.wh_t].size(); i++)
- sir_fin[i+inf.pos-1]=s[inf.wh_t][i];
- else
- for(int i=prev-inf.pos; i<s[inf.wh_t].size(); i++)
- sir_fin[i+inf.pos-1]=s[inf.wh_t][i];
- }
- int main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(NULL);
- cin>>n;
- for(int i=1; i<=n; i++)
- {
- cin>>s[i];
- int ct;
- cin>>ct;
- int y;
- for(int j=1; j<=ct; j++)
- {
- nr_sir++;
- info x;
- x.wh_t=i;
- cin>>y;
- x.pos=y;
- vec.push_back(x);
- }
- int sz_s=s[i].size();
- int val=y+sz_s-1;
- nr_ch=max(nr_ch,val);
- }
- sort(vec.begin(),vec.end(),cmp);
- /*for(int i=0; i<nr_sir; i++)
- fout<<s[vec[i].wh_t]<<" "<<vec[i].pos<<endl;
- fout<<"DA\n";
- */
- int prev=0;
- init();
- for(int i=0; i<nr_sir; i++)
- {
- int sz=s[vec[i].wh_t].size();
- //fout<<s[vec[i].wh_t]<<" "<<prev<<" ";
- if(prev<sz+vec[i].pos-1)
- {
- modif(vec[i],prev);
- prev=sz+vec[i].pos-1;
- }
- if(prev>=nr_ch) {cout<<sir_fin; return 0;}
- //fout<<sir_fin<<"\n";
- }
- cout<<sir_fin;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement