zcmimi's blog
查看原题

点击跳转

  1. 如果个数中没有奇数,那么答案就是所有数字的gcd,然后构造答案就是输出\frac {gcd}2个回文串

  2. 如果个数中只有一个奇数,那么答案也是所有数字的gcd,然后构造答案就是输出gcd个回文串,个数为奇数的颜色放在回文串的中间

  3. 如果个数中有两个或以上的奇数,那么答案就是0,因为两个奇数就已经构造不出有优美cut的环来了

#include<bits/stdc++.h>
namespace ZDY{
    #pragma GCC optimize(3)
    #define il __inline__ __attribute__ ((always_inline))
    #define ll long long
    #define MB template <class T>il
    #define Fur(i,x,y) for(int i=x;i<=y;i++)
    #define Fdr(i,x,y) for(int i=x;i>=y;i--)
    #define fcin ios::sync_with_stdio(false)
    MB T GCD(T x,T y){return y?GCD(y,x%y):x;}
}using namespace ZDY;using namespace std;
#define N 10011
int n,a[30];
int main(){
    fcin;
    cin>>n;
    int f=0,x;
    Fur(i,1,n){cin>>a[i];if(a[i]&1)x=i,f++;}
    int ans=a[1];
    Fur(i,2,n)ans=GCD(ans,a[i]);
    if(f>1)ans=0;
    cout<<ans<<endl;
    if(f>1){
        Fur(i,1,n)while(a[i]--)cout<<char('a'-1+i);
        return 0;
    }
    if(f){
        Fur(i,1,ans)
            Fur(j,1,n)
            if(j!=x)
                Fur(k,1,a[j]/ans/2)cout<<char('a'-1+j);
        Fur(j,1,a[x]/ans)cout<<char('a'-1+x);
        Fdr(j,n,1)
        if(j!=x)
            Fur(k,1,a[j]/ans/2)cout<<char('a'-1+j);
    }
    else{
        Fur(i,1,ans/2){
            Fur(j,1,n)
                Fur(k,1,a[j]/ans)cout<<char('a'-1+j);
            Fdr(j,n,1)
                Fur(k,1,a[j]/ans)cout<<char('a'-1+j);
        }
    }
}
LG CF613C Necklace
comment评论
Search
search