Necklace
Necklace
https://ac.nowcoder.com/acm/problem/111227
参考代码:
#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; }