传送门:CF—1324A
测试样例:
input
4
3
1 1 3
4
1 1 2 1
2
11 11
1
100
output
YES
NO
YES
YES
题目大意:
t个测试样例,每个测试样例给定一个n和n个数。n个数表示每列方块的初始高度。当至少有一列的高度大于0时可以进行操作:
1.在某列上放置一个高度为2的方块。
2.当某行所有列的高度大于0时,可以将该行消掉,即所有列高度减1。
(其实就是俄罗斯方块的游戏,只不过下落的方块固定是高度为2的,且不能旋转的。)
问最终能否将所有的方块全部消掉。
思路:我们可以先将已知的能够消除的行全部消掉,再判断剩下的每列的高度是否是2的倍数。因为消除后剩下的每列高度是2的倍数,才能通过不断下落高度为2的方块将所有的方块全部消掉。
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
const int maxn=105;
int a[maxn];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int Min=1000;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(a[i]<Min)
Min=a[i];
}
int i;
for(i=0;i<n;i++)
{
a[i]-=Min; //消掉一开始能够消掉的
if(a[i]%2)
break;
}
if(i<n) //提前退出循环,说明有的列不是2的倍数
puts("NO");
else
puts("YES");
}
return 0;
}