CF1863A Channel

· · 个人记录

思路

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

容易发现,如果某个时刻存在总人数是满的,那么一定所有人都看到了,输出 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;
}