CF1863A Channel

发布时间 2023-08-31 16:32:42作者: One_JuRuo

思路

最开始没看懂题意,还想了会儿。

容易发现,如果某个时刻存在总人数是满的,那么一定所有人都看到了,输出 YES

否则的话,如果不算减少的人数,总人数超过了 \(n\),即认为每次新增的人都是之前没看过的人(虽然最终可能会超过 \(n\),不符合情况),这样的话可能所有人都看到了,则输出 MAYBE

除了这两种情况外,就是 NO

AC code

#include <bits/stdc++.h>
using namespace std;
int T,n,m,q,maxn,num,flag;
char ch[105];
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d%d%s",&n,&m,&q,ch),maxn=m,num=m,flag=0;
		for(int i=0;i<q;++i)
		{
			if(num==n) flag=1;
			if(ch[i]=='+') ++num,++maxn;
			else --num;
		}
		if(flag||num==n) printf("YES\n");
		else if(maxn>=n) printf("MAYBE\n");
		else printf("NO\n");
	}
	return 0;
}