solution-at2080
AT2080题解
posted on 2022-01-04 06:01:01 | under 题解 | source
本题只是一个模拟题而已,从前往后遍历整个选手数组,按题目要求判断就行了。
我们设 \(a\) 表示已入选的 \(a\) 类选手数,\(b\) 表示已入选的 \(b\) 类选手数。
那么,对于每一个选手:
-
如果是 \(a\) 类,只要满足 \(a+b<A+B\),就将 \(a\) 加 1,在输出
Yes,否则输出No。 -
如果是 \(b\) 类,只要满足 \(a+b<A+B\) 且 \(b<B\)(排名在 \(b\) 类 \(B\) 位以内),就将 \(b\) 加 1,在输出
Yes,否则输出No。 -
如果是 \(c\) 类,直接输出
No。
代码
#include<bits/stdc++.h>
using namespace std;
int n,a,b,A,B;
char c[100005];//选手数组
int main(){
scanf("%d%d%d",&n,&A,&B);//读入
scanf("%s",c+1);
for(int i=1;i<=n;i++){
if(c[i]=='a'){//按要求判断
if(a+b<A+B)printf("Yes\n"),a++;
else printf("No\n");
}
else if(c[i]=='b'){
if(a+b<A+B&&b<B)printf("Yes\n"),b++;
else printf("No\n");
}
else printf("No\n");
}
return 0;
}

浙公网安备 33010602011771号