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

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

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

  1. #include<bits/stdc++.h>
  2. #define pii pair<int,int>
  3. #define mk make_pair
  4. #define fi first
  5. #define se second
  6. using namespace std;
  7. const int N=1010;
  8. int n,m,a[N][N],b[N][N];
  9. char s[N][N],t[N][N];
  10. queue<pii>q;
  11. bool checks(){
  12. for(int i=1;i<=n;i++){
  13. for(int j=1;j<=m;j++){
  14. if(s[i][j]!='X'){
  15. return 0;
  16. }
  17. }
  18. }
  19. return 1;
  20. }
  21. bool checkt(){
  22. for(int i=1;i<=n;i++){
  23. for(int j=1;j<=m;j++){
  24. if(t[i][j]!='O'){
  25. return 0;
  26. }
  27. }
  28. }
  29. return 1;
  30. }
  31. int cntrow[N],cntcol[N];
  32. bool vis[N][N],viscol[N],visrow[N];
  33. void bfs(int u,int v){
  34. if(!viscol[v]){
  35. viscol[v]=1;
  36. for(int i=1;i<=n;i++){
  37. if(i==u){
  38. continue;
  39. }
  40. b[i][v]=-1;
  41. if(!cntrow[i]){
  42. q.push(mk(i,v));
  43. }
  44. }
  45. }
  46. if(!visrow[u]){
  47. visrow[u]=1;
  48. for(int i=1;i<=m;i++){
  49. if(i==v){
  50. continue;
  51. }
  52. b[u][i]=-1;
  53. if(!cntcol[i]){
  54. q.push(mk(u,i));
  55. }
  56. }
  57. }
  58. }
  59. bool solve(){
  60. for(int i=1;i<=n;i++){
  61. for(int j=1;j<=m;j++){
  62. if(!b[i][j]&&cntrow[i]==1&&cntcol[j]==1){
  63. q.push(mk(i,j));
  64. b[i][j]=-1;
  65. vis[i][j]=1;
  66. }
  67. }
  68. }
  69. while(!q.empty()){
  70. pii pr=q.front();q.pop();
  71. bfs(pr.fi,pr.se);
  72. }
  73. for(int i=1;i<=n;i++){
  74. for(int j=1;j<=m;j++){
  75. if(~b[i][j]){
  76. if(a[i][j]^b[i][j]){
  77. return 0;
  78. }
  79. }
  80. }
  81. }
  82. return 1;
  83. }
  84. int main(){
  85. scanf("%d%d",&n,&m);
  86. for(int i=1;i<=n;i++){
  87. scanf("%s",s[i]+1);
  88. for(int j=1;j<=m;j++){
  89. a[i][j]=s[i][j]!='X';
  90. }
  91. }
  92. for(int i=1;i<=n;i++){
  93. scanf("%s",t[i]+1);
  94. for(int j=1;j<=m;j++){
  95. b[i][j]=t[i][j]!='X';
  96. cntrow[i]+=!b[i][j];
  97. cntcol[j]+=!b[i][j];
  98. }
  99. }
  100. if(checks()||checkt()){
  101. printf("0\n");
  102. return 0;
  103. }
  104. printf("%d\n",solve()?1:0);
  105. return 0;
  106. }

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. win2008系统:iis配置备份和还原简单操作

    (2013-09-26 16:33:22) 转载▼   分类: 开发类 当我们电脑系统有大量的站点和虚拟目录的时候,电脑因为种种原因需要重做系统,那么重装系统后这些站点我们是否只能一个一个的添加,如果 ...

  2. TensorFlow 用神经网络解决非线性问题

    本节涉及点: 激活函数 sigmoid 产生随机训练数据 使用随机训练数据训练 加入偏移量b加快训练过程 进阶:批量生产随机训练数据 在前面的三好学生问题中,学校改变了评三好的标准 —— 总分> ...

  3. P1097 【统计数字】

    超可爱的题目链接 这题是真不难,就是刚开始被自己的智商坑了一次... 用数组的常规做法实在是有点不切实际..数据大了. 所以用数组读入,再用循坏处理. 附上代码: #include<set> ...

  4. ArcEngine开发_添加字段,数据删除,插入,更新细节

    一.AE 向已存在的要素类中添加字段 链接:  AE 向已存在的要素类中添加字段 在向已存在的要素类中添加字段的时候,需要用到ICLASS接口.于是,进一步的调整代码如下,问题得以解决 static ...

  5. springboot 极简使用例子: redis,MySql数据库,日志,netty,打包和运行

    配置 创建项目的时候选择 application.yml内容如下 spring: redis: host: 127.0.0.1 port: 6379 database: 0 datasource: d ...

  6. hive自定义udaf函数

    自定义udaf函数的代码框架 //首先继承一个类AbstractGenericUDAFResolver,然后实现里面的getevaluate方法 public GenericUDAFEvaluator ...

  7. priority_queue member function

    没有优先队列的dijkstra不算真的dijkstra 所以我又回来补常识了 <1>priority_queue::emplace <7>priority_queue::top ...

  8. codeforces 620C

    题目链接:https://codeforces.com/problemset/problem/620/C 题目分析 题意:给你一串珍珠,每个珍珠都有一个对应值,需要分割这n个珍珠(必须连续),使得每一 ...

  9. AppCan调试问题

    来源:http://edu.appcan.cn/theVideoMain1.html?chapterId=248_1 第1步, 生成AppCan调试中心 第2步, 启动AppCan调试中心 第3步, ...

  10. 测试基础_<一>

    1: 过程决定质量, 测试过程贯穿整个软件开发声明周期; 2: 测试过程和开发过程在整个开发周期相辅相成; 3: 测试过程是对整个开发过程的验证, 二者互相依赖 4: 测试过程是整个测试活动中一个至关 ...