又一道可写的小清新思维题

其实想到倒着做了,然而还是因为T1害人不浅(我太菜了),所以并没有写

考虑两个局面不同,显然至少打了一次地鼠,基于操作的颜色覆盖性质,我们可以考虑把操作倒着做,对于一个X点,其同行同列没有其他的X点,则可以考虑将该点逆操作,其同行同列的原颜色可以不被考虑,对于一个颜色忽略不计的点,如果其同行同列没有X点,则亦可忽略其同行同列的颜色,对此可以BFS解决,时间复杂度\(\mathcal{O}(nm)\)

#include<bits/stdc++.h>
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second using namespace std; const int N=1010; int n,m,a[N][N],b[N][N]; char s[N][N],t[N][N]; queue<pii>q; bool checks(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(s[i][j]!='X'){
return 0;
}
}
}
return 1;
} bool checkt(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(t[i][j]!='O'){
return 0;
}
}
}
return 1;
} int cntrow[N],cntcol[N]; bool vis[N][N],viscol[N],visrow[N]; void bfs(int u,int v){
if(!viscol[v]){
viscol[v]=1;
for(int i=1;i<=n;i++){
if(i==u){
continue;
}
b[i][v]=-1;
if(!cntrow[i]){
q.push(mk(i,v));
}
}
}
if(!visrow[u]){
visrow[u]=1;
for(int i=1;i<=m;i++){
if(i==v){
continue;
}
b[u][i]=-1;
if(!cntcol[i]){
q.push(mk(u,i));
}
}
}
} bool solve(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!b[i][j]&&cntrow[i]==1&&cntcol[j]==1){
q.push(mk(i,j));
b[i][j]=-1;
vis[i][j]=1;
}
}
}
while(!q.empty()){
pii pr=q.front();q.pop();
bfs(pr.fi,pr.se);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(~b[i][j]){
if(a[i][j]^b[i][j]){
return 0;
}
}
}
}
return 1;
} int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",s[i]+1);
for(int j=1;j<=m;j++){
a[i][j]=s[i][j]!='X';
}
}
for(int i=1;i<=n;i++){
scanf("%s",t[i]+1);
for(int j=1;j<=m;j++){
b[i][j]=t[i][j]!='X';
cntrow[i]+=!b[i][j];
cntcol[j]+=!b[i][j];
}
}
if(checks()||checkt()){
printf("0\n");
return 0;
}
printf("%d\n",solve()?1:0);
return 0;
}

noi.ac NA536 【打地鼠】的更多相关文章

  1. noi.ac #536 打地鼠

    题目链接:戳我 [问题描述] 小A在玩打地鼠游戏.有一个n×m的网格,每个位置上地鼠都会要么冒出头要么缩进去.地鼠很狡猾,每次小A选一个地鼠冒出头的格子(x,y)把它打下去,但同一行同一列的地鼠全都会 ...

  2. # NOI.AC省选赛 第五场T1 子集,与&最大值

    NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...

  3. NOI.ac #31 MST DP、哈希

    题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...

  4. NOI.AC NOIP模拟赛 第五场 游记

    NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...

  5. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  6. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  7. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  8. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  9. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

随机推荐

  1. 备份和恢复IMail数据/IMail的服务端口

    1.备份和恢复IMail数据 首先你需要备份它的系统文件.方法是将“\imail”整个目录树复制下来. 其次还需要备份它的注册表.可选“localhost→General→Backup”来复制:或打开 ...

  2. Python爬虫学习==>第七章:urllib库的基本使用方法

    学习目的: urllib提供了url解析函数,所以需要学习正式步骤 Step1:什么是urllib urllib库是Python自带模块,是Python内置的HTTP请求库 包含4个模块: >& ...

  3. 如何在google colab加载kaggle数据

    参考https://medium.com/@yvettewu.dw/tutorial-kaggle-api-google-colaboratory-1a054a382de0 从本地上传到colab上十 ...

  4. HDU 1260 Tickets (动态规划)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  5. hue改下载行数

    参考: https://blog.csdn.net/lingbo229/article/details/85991230 修改hue所在机器的默认配置后,重启hue即可 find / -name be ...

  6. 从零开始,SpreadJS 新人学习笔记

    Hello,大家好,我是Fiona,从事前端开发工作,我十分热爱我的工作和一直默默栽培我的老板(这段请加粗). 前不久,接到老板的安排: 说实话,接到这个需求,我整个人的状态是这样的: 但是,我不能辜 ...

  7. 大数据之Hadoop完全分布式集群搭建

    1.准备阶段 1.1.新建三台虚拟机 Hadoop完全分市式集群是典型的主从架构(master-slave),一般需要使用多台服务器来组建.我们准备3台服务器(关闭防火墙.静态IP.主机名称).如果没 ...

  8. spring配置文件拆分策略及方法

    一.拆分策略 如果一个开发人员负责一个模块,我们采用公用配置(包括数据源.事务等)+每个系统模块一个单独配置文件(包括Dao.Service.Web控制器)的形式 如果是按照分层进行的分工,我们采用公 ...

  9. Luogu P4902 乘积

    题目 我们要求的是 \[ \prod\limits_{i=a}^b\prod\limits_{j=1}^i(\frac ij)^{\lfloor\frac ij\rfloor} \] 先把它拆开 \[ ...

  10. MySQL substring_index函数

    MySQL  substring_index函数 substring_index(str,delim,count)       str:要处理的字符串       delim:分隔符       co ...