题干
![](https://i-blog.csdnimg.cn/blog_migrate/07bdd8d8f23a810c10d74a5c5dfc60b6.jpeg)
解答:
该题目在解决的时候,需要发现就是对于相同的字符我们应该放在一起,这样在进行修改的时候,对其他字符的影响才会小.
然后连续相同字符个数 和 组成的回文子串数目 它们的通解为:
an = (n ^ 2 + n) / 2
所以,我们可以依次进行构造,具体解法为:
string red = "red"
string res ;
int n = 0;
cin >> n;
int idx = 0; //从r开始构造
while(n){
int sum = 0; //记录由当前字符连续构成的回文子串的数目
int i = 1;
while(sum + i <= n){
sum += i;
i++;
res += red[idx];
}
//切换到下一个字符
x -= sum;
idx = (idx + 1) % 3;
}