AISing Programming Contest 2021(AtCoder Beginner Contest 202)

D - aab aba baa
根据题意
从左往右进行分析
如果当前该字母为a
那么存在两种情况
一种为b的数量为0
一种为剩余的k的数量小于右边所有情况的总和
其总和对应为C(剩余的长度,b的个数)
反之则为b

点击查看代码
int get(int x,int y){
    int ans=1;
    for(int i=1;i<=y;i++){
        ans=(x-i+1)*ans/i;
    }
    return ans;
}
void solve(){
    int a,b,k;cin>>a>>b>>k;
    int n=a+b;
    for(int i=1;i<=n;i++){
        if(a==0){
            cout<<"b";
        }
        else if(b==0){
            cout<<"a";
        }
        else if(k>get(a+b-1,a-1)){
            k-=get(a+b-1,a-1);
            cout<<"b";b--;
        }
        else {
            cout<<"a";a--;
        }
    }
}
posted @ 2024-04-06 19:50  archer2333  阅读(11)  评论(0)    收藏  举报