cf.div3.r768.B 代码+简析
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int t;
cin >> t;
while(t --)
{
int n;
cin >> n;
string res;
string d;
for(int i = 0; i < n - 2; i ++) //跳过空格写入字符串
{
cin >> d;
res += d;
}
string ans;
ans = ans + res[0] + res[1];//第一第二个肯定直接读入
int len = res.size();
for(int i = 2; i < len; i ++)
if(res[i] == res[i - 1]) res [i] = 'c'; //线性判断,能保证前面判过的一定是正确的。此时将本位与前一位比较,相等的话就让res[i] 变成不是a或b的某一值,这样就不会让下一个res[i]在判断了(因为前一个res[i]已经被筛掉了)
else ans += res[i];
int l = ans.size();
if(l == n) printf("%s\n", ans.c_str());
else
{
cout << ans; //一般来说都会直接求出结果,size小的是因为有连续的 aa 或者 bb 出现, 根据ans的最后一位补a或b就行了
for(int i = 0 ; i < n - l; i ++) cout << ans[l - 1];
cout << endl;
}
}
return 0;
}