「CF#662」A Applejack and Storages(div.2)

题意

Link

给你n块木板,然后进行q次询问,询问的时候会减少或增加木板数量

问在当前询问下是否能使用现有的木板构成一个正方形和一个矩形(也可以是正方形)

构成的时候,每一条边是只能用一块木板

题解

用两个变量统计一下就ok了,木板用桶存一下

有多少组木板长度一样的(4个为一组记为ans4)

在除去前面的一组的情况下,还有多少组长度为一样的(2个为一组,记为ans2)

然后就

if(ans4>=2||(ans4==1&&ans2>=2))printf("YES\n");
else printf("NO\n");//能构成俩个正方形 或者 构成一个正方形和一个矩形

Code

#include <bits/stdc++.h>
using namespace std;

#define RE register

int f[100100],n,q,qwq;
int ans2=0,ans4=0;

inline void fread(int &x){
    x=0;
    int f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    x*=f;
}

int main(){
    fread(n);
    for(RE int i=1;i<=n;i++){
        fread(qwq);
        f[qwq]++;
        if(f[qwq]%4==0)ans4++,ans2--;
        else if(f[qwq]%2==0)ans2++;
    }
    fread(q);
    for(RE int i=1;i<=q;i++){
        char ch=getchar();
        if(ch=='+'){
            fread(qwq);
            f[qwq]++;
            if(f[qwq]%4==0)ans4++,ans2--;
            else if(f[qwq]%2==0)ans2++;
            if(ans4>=2||(ans4==1&&ans2>=2))printf("YES\n");
            else printf("NO\n");
        }else{
            fread(qwq);
            if(f[qwq]%4==0)ans4--,ans2++;
            else if(f[qwq]%2==0)ans2--;
            f[qwq]--;
            if(ans4>=2||(ans4==1&&ans2>=2))printf("YES\n");
            else printf("NO\n");
        }
    }
    return 0;
}
posted @ 2021-08-13 11:25  sushitong  阅读(84)  评论(0)    收藏  举报