参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[205];
char b[1000005];
int main()
{
int n;
scanf("%d",&n);
int ji=0, ki=-1, sum=0, l=0, r, ans=0;
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
if(i==0)
{
ans=a[i];
}
else
{
ans=__gcd(ans,a[i]);
}
if(a[i]%2==1)
{
ji++;
ki=i;
}
sum=sum+a[i];
}
r=sum-1;
int flag=0;
for(int i=0; i<n; i++)
{
if(a[i]==sum)
{
flag=1;
}
}
if(ji>1)
{
printf("0\n");
for(int i=0; i<n; i++)
{
for(int j=0; j<a[i]; j++)
{
printf("%c",i+'a');
}
}
}
else
{
ji=0;
for(int i=0; i<n; i++)
{
a[i]=a[i]/ans;
if(a[i]%2==1)
{
ji++;
ki=i;
}
}
if(ji>1)
{
ans=ans/2;
printf("%d\n",ans*2);
ji=0;
sum=sum/ans;
for(int i=0; i<n; i++)
{
a[i]=a[i]*2;
}
for(int k=0; k<ans; k++)
{
int l=0+k*sum, r=sum-1+k*sum;
for(int i=0; i<n; i++)
{
for(int j=0; j<a[i]; j=j+2)
{
b[l++]='a'+i;
b[r--]='a'+i;
}
}
}
}
else
{
printf("%d\n",ans);
a[ki]--;
ji=0;
sum=sum/ans;
for(int k=0; k<ans; k++)
{
int l=0+k*sum, r=sum-1+k*sum;
for(int i=0; i<n; i++)
{
for(int j=0; j<a[i]; j=j+2)
{
b[l++]='a'+i;
b[r--]='a'+i;
}
}
b[l]=ki+'a';
}
}
for(int i=0; i<sum*ans; i++)
{
printf("%c",b[i]);
}
}
printf("\n");
return 0;
}

京公网安备 11010502036488号