「CF#662」A Applejack and Storages(div.2)
题意
给你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;
}

浙公网安备 33010602011771号