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周年纪念碑,作为杰出校友的你被找了过来,帮校方确定纪念碑的选址. 纪念中学的土地可以看作是一 ...
随机推荐
- Java for LeetCode 108 Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题 ...
- 使用viewholder优化listview,减少findViewById的次数
- jQuery/CSS3实现Android Dock效果
在线演示 本地下载
- Ctags快速入门
Ctags快速入门 在vim下阅读代码,特别是阅读不熟悉的代码时,ctags是一个提高效率的强大的工具. 1. ctags是什么? ctags可以将代码中的函数.方法.类.变量和其他的标识符进行索引, ...
- JS事件派发器EventEmitter
原文地址:http://zhangyiheng.com/blog/articles/js_event_mitter.html 需求 随着Browser客户端JS越来越复杂,MVC(Client端)设计 ...
- kvm初体验之八:调整vm的vcpu, memory, disk大小
假设host上创建的vm的名字为vm1. 1. 查看vm1的domain information [root@tanghuimin thm]# virsh dominfo vm1 Id: 10 Nam ...
- mysql修改初始密码
通过MySQL命令行,可以修改MySQL数据库的密码,下面就为您详细介绍该MySQL命令行,如果您感兴趣的话,不妨一看. 格式:mysqladmin -u用户名 -p旧密码 password 新密码 ...
- AtCoder AGC #4 Virtual Participation
我好懒啊QAQ 老规矩 从C开始 C.给一个矩阵,里面有一些紫色方块,你需要涂两个矩阵,一个红色,一个蓝色,保证你涂的颜色四连通 然后把红色蓝色矩阵叠起来要求紫色的地方必须是紫色,其他地方不能是紫色 ...
- python爬虫知识点总结(八)Selenium库详解
官方学习文档:http://selenium-python.readthedocs.io/api.html 一.什么是Selenium? 答:自动化测试工具,支持多种浏览器.用来驱动浏览器,发出指令让 ...
- java项目文件的路径问题
title: 项目下的路径问题 tags: grammar_cjkRuby: true --- 在javaee的项目中,存取文件,解析xml和properties文件,以及项目中的文件,都需要获取路径 ...