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

其实想到倒着做了,然而还是因为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. CTF—攻防练习之HTTP—目录遍历

    主机:192.168.32.152 靶机:192.168.32.163 目录遍历攻击又称(目录爬升,目录回溯,点-点斜线),指再访问存储在web根文件之夹外的文件和目录,通过操控带有"点-斜 ...

  2. PJzhang:ping命令的基本用法

    猫宁!!! 参考链接:https://www.cnblogs.com/diantong/p/9626751.html http://aiezu.com/article/linux_ping_comma ...

  3. ArcEngine中打开各种数据源(WorkSpace)的连接 (SDE、personal/File、ShapeFile、CAD数据、影像图、影像数据集)

    ArcEngine 可以接受多种数据源.在开发过程中我们使用了如下几种数据源 1.企业数据库(SDE) 企业数据库需要使用SDE来管理,所以需要使用SDE的Workspace来表示连接.在AE接口中, ...

  4. nginx配置反向代理支持session

    Nginx反向代理tomcat,很是方便,但是也有些细节的问题需要注意:今天遇到了这样一个问题,tomcat中路径“host/web1”,nginx中直接“host/”代理,这时候session就无法 ...

  5. OI模板のpoke流[大型考试复习必备/kl]

    数论 快速乘: ll qmul(ll x,ll y,ll mod) { ll ans=0; while(y) { if(y&1) (ans+=x)%=mod; y>>=1; (x+ ...

  6. 算法 - k-means算法

    一.聚类思想 所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有相似的特征,如下图所示:     根据样本之间的距离或者说是相似性(亲疏性),把 ...

  7. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 将文本文件(csv)数据导进数据库

    第二节 将文本文件数据导进数据库 该小节介绍如何用BIML生成ssis包,将货币文本导入到数据库currency的表中. SSIS组件: Connection Manager组建管理connectio ...

  8. JS数据结构的栈和队列操作

    数据结构:列表.栈.队列.链表.字典.散列.图和二叉查找树! 排序算法:冒牌.选择.插入.希尔.归并和快速! 查找算法:顺序查找和二分查找 在平时工作中,对数组的操作很是平常,它提供了很多方法使用,比 ...

  9. [Nest] 02.nest之控制器

    控制器 Controller Nest 的核心概念 模块 Module 控制器 Controller 服务与依赖注入 Provider Dependency injection 控制器负责处理应用的特 ...

  10. 爬取快代理的免费IP并测试

    各大免费IP的网站的反爬手段往往是封掉在一定时间内访问过于频繁的IP,因此在爬取的时候需要设定一定的时间间隔,不过说实话,免费代理很多时候基本都不能用,可能一千个下来只有十几个可以用,而且几分钟之后估 ...