题意:给出一些串的位置,要求构造成原串,空余的地方补a;
思路:将每一个串的位置用vector存,排序,然后避免重复。
PS:在循环里面string 赋值就超时了,要调用,因为这里串的长度和串的个数都很大。。
Code:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
#define INF 0x3f3f3f3f
#define clr(x,y) memset(x,y,sizeof x)
typedef pair<int,int> P;
string s[maxn];
vector<P>v;
int main()
{
int n;
while( ~ scanf("%d",&n))
{
v.clear();
for(int i = 1; i <= n;i ++)
{
cin >> s[i];
int nn;
scanf("%d",&nn);
while(nn --)
{
int x;
scanf("%d",&x);
v.push_back(P(x,i));
}
}
sort(v.begin(),v.end());
int len = 1;
string ans;
for(int i = 0; i < v.size(); i ++)
{
int p = v[i].first,t2 = v[i].second;
while(p > len)
ans += 'a',len ++;
if(len >= p)
{
for(int j = len - p;j < s[t2].size(); j ++)
{
len ++;
ans += s[t2][j];
}
}
}
cout << ans << endl;
}
return 0;
}