codeforces A. Simple Palindrome
目录
题面
代码
题面
A. 简单回文串
每个测试用例时间限制:1 秒
每个测试用例内存限制:256 兆字节
纳雷克要在幼儿园陪一些两岁的孩子度过两个小时。他想教孩子们竞技编程,他们的第一堂课是关于回文串的。
纳雷克发现孩子们只认识英文字母表中的元音字母(即 a、e、i、o 和 u 这几个字母),所以他需要构造一个仅由元音字母组成的字符串。构造好字符串后,他会让孩子们数其中是回文串的子序列的数量。纳雷克想把问题简单化,所以他在寻找一个字符串,使得其中回文子序列的数量最少。
请帮助纳雷克找到一个长度为 n ,且仅由小写英文字母中的元音字母(a、e、i、o 和 u )组成的字符串,该字符串中的回文子序列数量最少。
定义
一个字符串如果从左到右和从右到左读起来一样,那么它就是一个回文串。
如果字符串 t 可以通过从字符串 s 中删除若干个(可能是零个或全部)字符,然后将剩余字符按顺序连接而得到,那么 t 就是 s 的一个子序列。例如,“odocs” 是 “codeforces” 的一个子序列。
输入
输入的第一行包含一个整数 t(1 ≤ t ≤ 100),表示测试用例的数量。接下来是每个测试用例的描述。
每个测试用例仅包含一行,其中有一个整数 n(1 ≤ n ≤ 100),表示字符串的长度。
输出
对于每个测试用例,输出任意一个满足上述条件且长度为 n 的字符串。
说明
在第一个例子中,“uo” 只有三个回文子序列:“u”、“o” 和空字符串。可以证明没有更好的答案了。
在第三个例子中,“oeiiua” 只有八个回文子序列:“o”、“e”、“i”、“i”、“u”、“a”、“ii” 和空字符串。可以证明没有更好的答案了。
代码
#include<bits/stdc++.h>
using namespace std;
char b[5]={'a','e','i','o','u'};
void solve()
{
int n;
cin >> n;
vector<int>a(5);
if(n<=5)
{
for(int i=0;i<n;i++)
{
cout << b[i];
}
cout << endl;
}
else{
for(int i=0;i<n;i++)
{
a[i%5]++;//预处理每一个字符输出的次数
}
for(int i=0;i<5;i++)
for(int j=0;j<a[i];j++)
cout << b[i];
cout << endl;
}
}
相同字母放一起时回文序列最少
int main()
{
int q;
cin >> q;
while(q--)
{
solve();
}
}