严重怀疑题目没开SPJ…
3. 回文构造机
题目ID:3722必做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 1000ms
空间限制: 262144kB
题目描述
时间:1s 空间:256M
题目描述:
XTX非常喜欢回文串,他认为回文会给自己带来好运,有一天他看到一个字符串突发奇想,如果将这个字符串所有字符打乱,然后每次操作只能挑选若干个能构成回文串的字符组合成一个字符串,XTX最少需要操作几次才能取完所有字符。
输入格式:
输入一个字符串S,1≤∣s∣≤10001≤∣s∣≤1000
输出格式:
第一行输出一个整数K,表示回文串的个数
接下来K行每行输出一个回文串,要求输出的所有字符串的字符集合恰好是输入的S中的所有字符集合
样例输入1:
abbaa
样例输出1:
1 ababa
样例输入2:
abc
样例输出2:
3 a b c
样例输入3:
aaabbbccc
样例输出3:
3 aba bcb cac
样例输入4:
z
样例输出4:
1 z
子任务一30分:|s|<=10
子任务二30分:|s|<=100
子任务三40分:|s|<=1000
提示:
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s;
int a[30];
int k;
int main(){
cin>>s;
if(s.size()==1){
cout<<1<<endl<<s;
return 0;
}
for(int i=0;i<s.size();i++){
a[s[i]-96]++;
}
for(int i=1;i<=26;i++){
if(a[i]%2==1){
k++;
}
}
cout<<k<<endl;
//输出第一个回文串
for(int i=1;i<=26;i++){
if(a[i]%2==0){
for(int j=1;j<=a[i]/2;j++){
cout<<(char)(i+96);
}
}
}
for(int i=1;i<=26;i++){
if(a[i]%2==1){
for(int j=1;j<=a[i];j++){
cout<<(char)(i+96);
}
break;
}
}
for(int i=1;i<=26;i++){
if(a[i]%2==0){
for(int j=1;j<=a[i]/2;j++){
cout<<(char)(i+96);
}
}
}
cout<<endl;
//第一个回文串消耗完所有偶数,并且将第一个奇数消耗完
for(int i=1;i<=26;i++){
if(a[i]%2==0){
a[i]=0;
}
}
for(int i=1;i<=26;i++){
if(a[i]%2==1){
a[i]=0;
break;
}
}
for(int i=1;i<=26;i++){
if(a[i]!=0){
for(int j=1;j<=a[i];j++){
cout<<(char)(i+96);
}
cout<<endl;
}
}
return 0;
}
/*
*/