根据题意,给定一个 \(2\times2\) 的仅包含 \(0\) 和 \(1\) 的二维数组。定义一个操作,每次可以选择一行和一列将其变成 \(0\),求最小操作次数。

思路:根据枚举可得共有 \(14\) 种矩阵形态,通过观察可得:

  1. 当矩阵中 \(1\) 的数量为 \(0\) 时,即只有一种形态,其最小操作次数为 \(0\)。

  2. 当矩阵中 \(1\) 的数量为 \(1\) 时,共有四种形态(分别是 \(1\) 分布在四个角),此时最小操作次数为 \(1\)。

  3. 当矩阵中 \(1\) 的数量为 \(2\) 时,共有四种形态(分别是在同一行或同一列,在对角线上),其最小操作次数为 \(1\)。

  4. 当矩阵中 \(1\) 的数量为 \(3\) 时,共有四种形态(其形状类似于中文笔画中的横折,将其进行旋转),这时最小操作次数为 \(1\)。

  5. 当矩阵中 \(1\) 的数量为 \(4\) 时,只有一种形态,其最小操作次数为 \(2\)。

做法一:根据判断形态得出答案,可以通过此题,但做法二更优,此处使用做法二。

做法二:综上所述,可得当 \(1\) 的数量为 \(0\) 时,最小操作数为 \(0\);当 \(1\) 的数量为 \(1/2/3\) 时,最小操作数为 \(1\);当 \(1\) 的数量为 \(4\) 时,最小操作数为 \(2\)。即通过计算 \(1\) 的数量来得出答案,可以直接省去数组。

#include<cstdio>
#include<iostream>
using namespace std;
int t;//共有t组数据
int a;
int cnt;//计算1的数量
int main(){
scanf("%d",&t);
while(t--){
cnt=0;
for(int i=0;i<4;i++){
scanf("%d",&a);
cnt+=a;//统计1的数量
}
if(cnt==0) puts("0");
else if(cnt==1||cnt==2||cnt==3) puts("1");
else puts("2");
}
return 0;
}

CF1701A Grass Field 题解的更多相关文章

  1. 1.2机器学习基础下--python深度机器学习

    1. 机器学习更多应用举例: 人脸识别   2. 机器学习就业需求:      LinkedIn所有职业技能需求量第一:机器学习,数据挖掘和统计分析人才      http://blog.linked ...

  2. http://codeforces.com/problemset/problem/847/E

    E. Packmen time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  3. T59

    Working without a break makes you more prone to error. The great drawback to living near a main road ...

  4. PatentTips - Blending a Graphic over a Video

    Television broadcasts of events can be enhanced by providing graphics that are blended with other im ...

  5. Lesson 2 Spare that spider

    How much of each year do spiders killing insects? Why, you may wonder, should spiders be our friends ...

  6. 【题解】洛谷P3119 Grass Cownoisseur G

    题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时 ...

  7. UVA 10382 Watering Grass(区间覆盖,贪心)题解

    题意:有一块草坪,这块草坪长l 米,宽 w 米,草坪有一些喷头,每个喷头在横坐标为 p 处,每个喷头的纵坐标都是(w/2) ,并且喷头的洒水范围是一个以喷头为圆心,半径为 r 米的圆.每次最少需要打开 ...

  8. SPOJ ADAFIELD Ada and Field(STL的使用:set,multiset,map的迭代器)题解

    题意:n*m的方格,“0 x”表示x轴在x位置切一刀,“0 y”表示y轴在y位置切一刀,每次操作后输出当前面积最大矩形. 思路:用set分别储存x轴y轴分割的点,用multiset(可重复)储存x轴y ...

  9. Grass Cownoisseur[Usaco2015 Jan]

    题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...

随机推荐

  1. 如何在Linux上恢复误删除的文件或目录

    Linux不像windows有那么显眼的回收站,不是简单的还原就可以了.linux删除文件还原可以分为两种情况,一种是删除以后在进程存在删除信息,一种是删除以后进程都找不到,只有借助于工具还原,这里分 ...

  2. java高级用法之:JNA中的回调

    目录 简介 JNA中的Callback callback的应用 callback的定义 callback的获取和应用 在多线程环境中使用callback 总结 简介 什么是callback呢?简单点说 ...

  3. Elasticsearch高级之-集群搭建,数据分片

    目录 Elasticsearch高级之-集群搭建,数据分片 一 广播方式 二 单播方式 三 选取主节点 四 什么是脑裂 五 错误识别 Elasticsearch高级之-集群搭建,数据分片 es使用两种 ...

  4. 渗透:EWSA

    EWSA全称Elcomsoft Wireless Security Auditor.ElcomSoft是一家俄罗斯软件公司,出品过不少密码破解软件,涉及Office.SQL.PDF.EFS等等. EW ...

  5. 组织:ISO

    国际标准化组织(ISO)是一个全球性的非政府组织,成立于1947年,总部位于瑞士日内瓦. 该组织负责绝大部分领域(包括军工.石油.船舶等垄断行业)的标准化活动,中国是其正式成员,代表中国参加的国家机构 ...

  6. Linux Cgroup v1(中文翻译)(2):CPUSETS

    英文原文:https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpusets.html Copyright (C) 2004 BU ...

  7. markdowm使用学习

    markdowm学习 标题(#/##/###/####) 三级标题 四级标题 字体(*/) hello world! hello world! hello world! hello world! he ...

  8. 开源流程引擎该如何选择flowable还是camunda

    市场上比较有名的开源流程引擎有osworkflow.jbpm.activiti.flowable.camunda.现在国内用的最多的是activiti.flowable.camunda,下面主要从功能 ...

  9. redis如何实现数据同步

    redis如何实现数据同步 两种,1全同步,2部分同步 全备份: 在slave启动时会向master发送sync消息,master收到slave这条消息之后,将启动后台备份进程,备份完成之后,将备份数 ...

  10. centos8 编译安装 httpd-2.4

    前提:关闭selinux和防火墙 SElinux: setenforce 0 vim /etc/selinux/config-->disable 防火墙: firewall-cmd --set- ...