如果有两种颜色的珠子个数是奇数个,那么魅力值就是0,任意输出一个串就可以。
否则,魅力值一定是颜色个数的最大公约数。
代码如下:
#include<bits/stdc++.h>
#define lalala printf("lalala\n");
#define N 35
using namespace std;
int n,cnt[N];
int c[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>cnt[i];
int num=cnt[1];
int flag=0;
for(int i=1;i<=n;i++)
{
if(cnt[i]&1)
{
flag++;
if(flag==2) break;
}
}
for(int i=2;i<=n;i++) num=__gcd(num,cnt[i]);
if(flag==2)
{
printf("0\n");
for(int i=1;i<=n;i++){
if(cnt[i])
{
while(cnt[i]--) printf("%c",i+'a'-1);
}
}
printf("\n");
return 0;
}
for(int i=1;i<=n;i++) cnt[i]/=num;
/*
for(int i=1;i<=n;i++) printf("%d ",cnt[i]);
printf("\n");
*/
printf("%d\n",num);
flag=0;
for(int i=1;i<=n;i++){
if(cnt[i]%2==1){
flag++;
if(flag==2) break;
}
}
if(flag==2)
{
num/=2;
while(num--)
{
memcpy(c,cnt,sizeof(cnt));
for(int i=1;i<=n;i++)
{
while(c[i])
{
printf("%c",'a'+i-1);
c[i]--;
}
}
memcpy(c,cnt,sizeof(cnt));
for(int i=n;i>=1;i--)
{
while(c[i]){
printf("%c",'a'+i-1);
c[i]--;
}
}
}
cout<<endl;
}
else
{
//lalala
while(num--)
{
memcpy(c,cnt,sizeof(cnt));
for(int i=1;i<=n;i++)
{
if(c[i]%2==0)
{
c[i]/=2;
while(c[i]){
printf("%c",'a'+i-1);
c[i]--;
}
}
}
for(int i=1;i<=n;i++){
if(c[i]%2)
{
while(c[i]){
printf("%c",'a'+i-1);
c[i]--;
}
}
}
memcpy(c,cnt,sizeof(c));
for(int i=n;i>=1;i--)
{
if(c[i]%2==0)
{
c[i]/=2;
while(c[i]){
printf("%c",'a'+i-1);
c[i]--;
}
}
}
}
printf("\n");
}
return 0;
} 


京公网安备 11010502036488号