题意简述
给出一个 2×2 的场地,其中 1 代表草,0 代表空地。
现在可以选择一行和一列的草全部切割成空地(原来是空地就不变)。
求最少要切割几次才能将这块地完全变成空地。
解题思路
分类讨论。
因为 2×2 实在是太小了,我们可以将含草的格子数从 0→4 讨论一遍。
1. cntgrass=0。
0000
已经全部是空地了,不用再切了,这时输出 0。
2. cntgrass=1。
0010
显然还需要再切一次,这时输出 1。
3. cntgrass=2。
1010
这时只用切一次。
还有一种情况:
0110
我们只需要选择 (2,2) 这个点就可以一次将其切割完。
在这种情况下,输出 1。
4. cntgrass=3。
1011
很显然,这种情况只需要切一次,输出 1。
5. cntgrass=4。
1111→0100→0000
所以这种情况要切三次,输出 3 即可。
代码实现
#include<bits/stdc++.h>
using namespace std;
int t,tmp;
int main() {
scanf("%d",&t);
while(t--) {
int sum=0;
for(int i=1;i<=4;i++) {
scanf("%d",&tmp);
if(tmp) sum++;
}
if(sum==0) puts("0");
else if(sum==1) puts("1");
else if(sum==2) puts("1");
else if(sum==3) puts("1");
else if(sum==4) puts("2");
}
return 0;
}
//code by TheCedar