当前位置: 首页 > news >正文

jzoj6003. 【THUWC2019模拟2019.1.16】Square (乱搞)

题面

1442599-20190116140131280-479703313.png

题解

不难发现,如果一行最后被染色,那么这行的颜色肯定一样,如果倒数第二个被染色,那么除了被最后一个染色的覆盖的那一部分剩下的颜色肯定一样

于是题目可以转化为每一次删去一行或一列颜色相同的,问最少几次删完

首先判断能不能删完。因为可行性和删的顺序没有关系,我们可以直接\(bfs\),能删就删,看最后是否有剩下

然后是最少的次数,首先行和列中肯定有一个是删满的

我们假设行全都删掉了,那么就是要求最多有多少列不用删。对于这些不用删的列,它们肯定颜色是一样的,所以现在就转化为最多有多少列是相同的。行同理

设最多有\(x\)行相同,\(y\)列相同,那么答案就是\(n+m-max(x,y)\)

然而咱有个比较迷的地方,本题中的相同似乎是指两种颜色的个数相同而不是对应位置颜色相同……按对应位置去做反而会\(WA\)……咱也不是很明白是怎么回事

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,1:0;}
using namespace std;
const int N=3005;
char s[N][N];int n,m,mp[N][N],rvis[N],cvis[N],r[N][2],c[N][2];
int sum[N],res;
void calc(){
    fp(i,1,n){
        int cnt=0;
        fp(j,1,m)cnt+=mp[i][j];
        ++sum[cnt],cmax(res,sum[cnt]);
    }
    fp(i,0,m)sum[i]=0;
    fp(j,1,m){
        int cnt=0;
        fp(i,1,n)cnt+=mp[i][j];
        ++sum[cnt],cmax(res,sum[cnt]);
    }
}
bool ck(){
    bool flag=1;
    int sn=n,sm=m;
    while(flag){
        flag=0;
        fp(i,1,n)if(!rvis[i]){
            fp(k,0,1)if(!r[i][k]){
                --sn,rvis[i]=1,flag=1;
                fp(j,1,m)--c[j][k^1];
            }
        }
        fp(j,1,m)if(!cvis[j]){
            fp(k,0,1)if(!c[j][k]){
                --sm,cvis[j]=1,flag=1;
                fp(i,1,n)--r[i][k^1];
            }
        }
    }
    return sn!=0&&sm!=0;
}
int main(){
//  freopen("testdata.in","r",stdin);
    freopen("square.in","r",stdin);
    freopen("square.out","w",stdout);
    scanf("%d%d",&n,&m);
    fp(i,1,n)scanf("%s",s[i]+1);
    fp(i,1,n)fp(j,1,m)mp[i][j]=(s[i][j]=='R'?1:0),++r[i][mp[i][j]],++c[j][mp[i][j]];
    if(ck())return puts("-1"),0;
    calc();
    printf("%d\n",n+m-res);
    return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10276707.html

相关文章:

  • MongoDB 之pymongodb
  • Web安全小攻略 | Web高能短文系列
  • 淘淘商城的一些错误
  • SpringBoot2.x升级后的变化
  • 算法学习心得
  • 利用Python讲多张图片合成PDF文件
  • Apache Beam实战指南 | 玩转大数据存储HDFSIO
  • 记一次面试题——call、apply、bind模拟实现的更好方式
  • 逻辑运算符
  • 古郡敦煌迎新年初雪 雪漠风光引游人
  • 台湾大学生在威海研习中华文化 感叹收获太多“惊喜”
  • 如何使用 Druid 和 Kafka 构造 Kappa 架构完成流量分析
  • 利用位运算实现加减乘除
  • IT应该自动化的7件事
  • 陕西彬州一男子持刀杀害两名女性 警方发布协查通告
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • HTML中设置input等文本框为不可操作
  • iOS 系统授权开发
  • MySQL-事务管理(基础)
  • PAT A1050
  • Rancher-k8s加速安装文档
  • Spring-boot 启动时碰到的错误
  • Swift 中的尾递归和蹦床
  • Zsh 开发指南(第十四篇 文件读写)
  • 和 || 运算
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 批量截取pdf文件
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 鱼骨图 - 如何绘制?
  • 自定义函数
  • Prometheus VS InfluxDB
  • 阿里云服务器如何修改远程端口?
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​学习一下,什么是预包装食品?​
  • # Java NIO(一)FileChannel
  • # 透过事物看本质的能力怎么培养?
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $.proxy和$.extend
  • (2)nginx 安装、启停
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (十三)Maven插件解析运行机制
  • (十一)手动添加用户和文件的特殊权限
  • (学习日记)2024.01.19
  • (转) Face-Resources
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net core控制台应用程序初识
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net mvc部分视图
  • .Net Winform开发笔记(一)