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

题意

Link

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

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

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

题解

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

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

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

然后就

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

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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;
}
0%