jzoj6003. 【THUWC2019模拟2019.1.16】Square (乱搞)
题面
题解
不难发现,如果一行最后被染色,那么这行的颜色肯定一样,如果倒数第二个被染色,那么除了被最后一个染色的覆盖的那一部分剩下的颜色肯定一样
于是题目可以转化为每一次删去一行或一列颜色相同的,问最少几次删完
首先判断能不能删完。因为可行性和删的顺序没有关系,我们可以直接\(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;
}
jzoj6003. 【THUWC2019模拟2019.1.16】Square (乱搞)的更多相关文章
- 【NOIP模拟赛】与非 乱搞
biubiu~~~ 正解是线段树维护真值表,但是我觉得对于这道题来说乱搞就够了....... 我们发现如果我们把每一个数都一开始取反就会发现对于最后结果来说 x=x^1,x nand x=x|x ,x ...
- [NOIP模拟赛][并没有用二分][乱搞AC]
圆圈舞蹈 [问题描述] 熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞.由于没有严格的教育,奶牛们之间的间隔不一致. 奶牛想知道两只最远的奶牛到底隔了多远.奶牛A到B的距离为A顺时针走和逆时针走,到达 ...
- [CSP-S模拟测试]:凉宫春日的忧郁(乱搞)
题目传送门(内部题101) 输入格式 第一行输入一个整数$T$,表示数据组数. 接下来$T$行,每行两个数$X,Y$,表示$T$组数据. 输出格式 输出共有$T$行,对于每一组数据,如果$X^Y\le ...
- @CSP模拟2019.10.16 - T3@ 垃圾分类
目录 @description@ @solution@ @accepted code@ @details@ @description@ 为了保护环境,p6pou建设了一个垃圾分类器. 垃圾分类器是一个 ...
- jzoj6008. 【THUWC2019模拟2019.1.18】Sequence (矩阵加速)
题面 茉优最近研究发现,一个人的想愿能力可以认为是字符串S的一个子串S[l,r],而连接值可以认为是这个子串的本质不同子序列个数.现在她想验证她的结论是否正确,于是她给了你Q个询问,希望你帮她来计算, ...
- jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)
Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些 ...
- [CSP-S模拟测试]:最小值(DP+乱搞)
题目背景 $Maxtir$更喜欢序列的最小值. 题目传送门(内部题128) 输入格式 第一行输入一个正整数$n$和四个整数$A,B,C,D$. 第二行输入$n$个整数,第$i$个数表示$a_i$. 输 ...
- [NOIP2018模拟赛10.16]手残报告
[NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...
- 【2018.06.26NOIP模拟】T1纪念碑square 【线段树】*
[2018.06.26NOIP模拟]T1纪念碑square 题目描述 2034年,纪念中学决定修建校庆100周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一 ...
随机推荐
- CUDA: 流
1. 页锁定主机内存 c库函数malloc()分配标准的,可分页(Pagable)的内存,cudaHostAlloc()分配页锁定的主机内存.页锁定内存也称为固定内存(Pinned Memory)或者 ...
- windows下创建做一个类似与linux 的SFTP
在项目中经常需要做通过ftp上传文件到ftp上,如果服务器是windows版的服务器又该如何做呢,下面就给大家介绍一个软件:freeSSHd 软件地址 http://www.freesshd.c ...
- Contiki 2.7 Makefile 文件(五)
4.第四部分 (1) oname = ${patsubst %.c,%.o,${patsubst %.S,%.o,$(1)}} 自定义函数,$(1)表示调用oname这个函数的第一个参数,patsub ...
- openstack制作镜像官网地址
http://docs.ocselected.org/openstack-manuals/kilo/image-guide/content/ch_creating_images_automatical ...
- CSS3实现自定义Checkbox动画
CSS3实现自定义Checkbox动画是一款CSS3自定义checkbox,而且这款checkbox还带有动画效果,当你选中checkbox的时候,会以动画的方式打上一个大大的勾. 源码下载:http ...
- BZOJ 1206 [HNOI2005]虚拟内存:模拟
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1206 题意: 内存大小为n(外存无限大),共有m次访问,每一次访问的信息编号为p. 对于每 ...
- 使用gdb调试c/c++代码
转自 http://blog.csdn.net/haoel/article/details/2879 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较 ...
- tensorflow 线性回归 iris
线性拟合
- TestDescription文档描述测试过程
测试描述文档是用xml语言描述测试过程的文档,一个测试过程包括测试信号建立,UUT引脚确定,建立连接关系,数据测量,断开连接关系,复位测试信号等步骤. 下图用标准的ATML语言描述了接通直流电源并测量 ...
- kettle脚本定时任务不执行
问题描述:在centos机器上部署了kettle脚本,每天定时跑一次,但是并没有成功跑,手动执行命令是可以的.而且写了一个测试的shell脚本也是可以执行的. 解决方案: 将2的错误输出,/usr/l ...