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--;
}
}
}

浙公网安备 33010602011771号