[CF题解] Simple Palindrome

这题写了半个小时还拉上了大佬
再写构造我是狗

1.题意简述

\(a,e,i,o,u\)构造一个串 使串中的回文子序列最少

2.读题

这道题其实并不难,难就难在什么是"回文子序列"。看到题目的第一眼,我相信你想到的肯定是:
哦哦,这题简单,不就是让他回文部分最小吗,那我直接输出\(aeiouaeiou\)循环不就行了吗。
结果得到的结果:

你定睛一看,回文子序列()

3.解法

所以,这样怎么解呢
我们以\(n=7\)为例,以我们第一次的做法,得到的是\(aeiouae\) ,其中的回文子序列:

我们可以看到,因为一直重复,所以非常多,当数量增加时会更加明显
一种显而易见的做法,同样字母叠加到一起,构造串
仍然以\(n=7\)为例 ,以当前做法,得到的是\(aaeeiou\),其中的回文子序列

2<3,因此得证
还有一种特殊情况,那就是\(n<=5\),那就直接输出就行了

4.std

#include <bits/stdc++.h>
using namespace std;
string str(int num, string t)
{
    string ret;
    while (num != 0)
    {
        num--;
        ret += t;
    }
    return ret;
}
void solve()
{
    int n;
    cin >> n;
    int k = n / 5;
    string ans = "";
    ans += str(k, "a");
    if (n % 5 != 0)
        ans += 'a', n--;
    ans += str(k, "e");
    if (n % 5 != 0)
        ans += 'e', n--;
    ans += str(k, "i");
    if (n % 5 != 0)
        ans += 'i', n--;
    ans += str(k, "o");
    if (n % 5 != 0)
        ans += 'o', n--;
    ans += str(k, "u");
    if (n % 5 != 0)
        ans += 'u', n--;
    cout << ans << endl;
}
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}
posted @ 2025-02-28 14:14  OIRikka  阅读(15)  评论(0)    收藏  举报