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;
}
posted @ 2025-02-25 15:30  Grisses  阅读(10)  评论(0)    收藏  举报
Document