题目链接

题意 : 给出一个 n * m 的矩阵,用规格 1 * 2 的多米诺去填充,题目数据保证最后只有一个格子是空白的(即没有被多米诺骨牌覆盖),问你现在通过移动多米诺能够产生多少种不同的状态(空白位置作为状态依据,所以最多只有 n * m 种状态)

分析 :

这题看着很吓人,一般来说不会想到直接去搜索

因为要证明若走出环,能不能拓展出更多的状态

这个貌似是不存在的,若空白的地方经过重重移动回到了原点

那么必定不能产生更多的状态了,所以直接搜就行了

至于怎么证明......我没有搜到更好的题解解释,看到了再来填坑吧....

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define ULL unsigned long long
  4.  
  5. #define scs(i) scanf("%s", i)
  6. #define sci(i) scanf("%d", &i)
  7. #define scd(i) scanf("%lf", &i)
  8. #define scl(i) scanf("%lld", &i)
  9. #define scIl(i) scanf("%I64d", &i)
  10. #define scii(i, j) scanf("%d %d", &i, &j)
  11. #define scdd(i, j) scanf("%lf %lf", &i, &j)
  12. #define scll(i, j) scanf("%lld %lld", &i, &j)
  13. #define scIll(i, j) scanf("%I64d %I64d", &i, &j)
  14. #define sciii(i, j, k) scanf("%d %d %d", &i, &j, &k)
  15. #define scddd(i, j, k) scanf("%lf %lf %lf", &i, &j, &k)
  16. #define sclll(i, j, k) scanf("%lld %lld %lld", &i, &j, &k)
  17. #define scIlll(i, j, k) scanf("%I64d %I64d %I64d", &i, &j, &k)
  18.  
  19. #define lson l, m, rt<<1
  20. #define rson m+1, r, rt<<1|1
  21. #define lowbit(i) (i & (-i))
  22. #define mem(i, j) memset(i, j, sizeof(i))
  23.  
  24. #define fir first
  25. #define sec second
  26. #define ins(i) insert(i)
  27. #define pb(i) push_back(i)
  28. #define pii pair<int, int>
  29. #define mk(i, j) make_pair(i, j)
  30. #define all(i) i.begin(), i.end()
  31. #define pll pair<long long, long long>
  32. using namespace std;
  33. ;
  34. , , -, };
  35. , , , };
  36. , n, m, k, G[][maxn];
  37. set<pii> s;
  38.  
  39. void PRINT()
  40. {
  41. ; i<=n; i++){
  42. ; j<=m; j++){
  43. ) printf("- ");
  44. else printf("%d ", G[i][j]);
  45. }puts("");
  46. }puts("");
  47. }
  48.  
  49. bool bound(int r, int c)
  50. { || c< || r>n || c>m); }
  51.  
  52. void DFS(int r, int c)
  53. {
  54. //PRINT();
  55.  
  56. if(s.count(mk(r, c))) return;
  57. else s.ins(mk(r, c));
  58.  
  59. ; i<; i++){
  60. ){
  61. int _1 = c + dc[i];
  62. *dc[i];
  63. if(bound(r, _1)) continue;
  64. if(bound(r, _2)) continue;
  65. if(G[r][_1] == G[r][_2]){
  66. G[r][_2] = -;
  67. G[r][c] = G[r][_1];
  68. DFS(r, _2);
  69. G[r][_2] = G[r][_1];
  70. G[r][c] = -;
  71. }
  72. }){
  73. int _1 = r + dr[i];
  74. *dr[i];
  75. if(bound(_1, c)) continue;
  76. if(bound(_2, c)) continue;
  77. if(G[_1][c] == G[_2][c]){
  78. G[_2][c] = -;
  79. G[r][c] = G[_1][c];
  80. DFS(_2, c);
  81. G[_2][c] = G[_1][c];
  82. G[r][c] = -;
  83. }
  84. }
  85. }
  86. }
  87.  
  88. int main(void)
  89. {
  90. while(~sciii(n, m, k)){
  91. mem(G, -);
  92. s.clear();
  93. ; i<k; i++){
  94. int r1, c1;
  95. int r2, c2;
  96. scii(r1, c1);
  97. scii(r2, c2);
  98. G[r1][c1] = cnt;
  99. G[r2][c2] = cnt++;
  100. }
  101.  
  102. ;
  103. ; i<=n; i++){
  104. ; j<=m; j++)
  105. ){
  106. st_r = i;
  107. st_c = j;
  108. Find = ;
  109. break;
  110. }
  111. if(Find) break;
  112. }
  113.  
  114. DFS(st_r, st_c);
  115.  
  116. printf();
  117. }
  118. ;
  119. }

2018山东省赛 H Dominoes ( 搜索 )的更多相关文章

  1. 2018山东省赛sequence

    2018山东省赛sequence因为必须要删除一个数,所以可以计算每个数删除的代价,从而选取代价最小的进行删除如果一个数大于它前面的所有数的最小值而小于次小值,删除最小值的代价就要+1:如果一个数本身 ...

  2. 2018山东省赛 E Sequence ( 思维 )

    题目链接 题意 : 给出一个排列,让你删除一个数,使得删除后整个序列的 Good 数数量最多.Good 数的定义为 若 Ai 为 Good 则存在 Aj < Ai ( j < i ) 分析 ...

  3. 2018山东省赛 G Game ( Nim博弈 && DP )

    题目链接 题意 : 给出 N 堆石子,每次可以选择一堆石子拿走任意颗石子,最后没有石子拿的人为败者.现在后手 Bob 可以在游戏开始前拿掉不超过 d 堆的整堆石子,现在问你有几种取走的组合使得 Bob ...

  4. 2018 ACMICPC上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 H - A Simple Problem with Integers (线段树,循环节) 链接:https://ac.nowcoder.co ...

  5. 2018省赛赛第一次训练题解和ac代码

    第一次就去拉了点思维很神奇的CF题目 2018省赛赛第一次训练 # Origin Title     A CodeForces 607A Chain Reaction     B CodeForces ...

  6. 2018天梯赛第一次训练题解和ac代码

    随着评讲的进行代码和题解会逐步放上来 2018天梯赛第一次训练 1001 : 进制转换 Time Limit(Common/Java):1000MS/10000MS     Memory Limit: ...

  7. Triangle (第8届山东省赛的某题)

    triangle(第8届山东省赛的某题) 传送门 题意:喵了个呜,这题意真是峰回路转啊.懒死了,不想描述. 做法:我们拿set或线段树维护exp的最小值,每次取出exp值最小的边,删除之.并更新这条边 ...

  8. 2013年山东省赛F题 Mountain Subsequences

    2013年山东省赛F题 Mountain Subsequences先说n^2做法,从第1个,(假设当前是第i个)到第i-1个位置上哪些比第i位的小,那也就意味着a[i]可以接在它后面,f1[i]表示从 ...

  9. 2013年省赛H题

    2013年省赛H题你不能每次都快速幂算A^x,优化就是预处理,把10^9预处理成10^5和10^4.想法真的是非常巧妙啊N=100000构造两个数组,f1[N],间隔为Af2[1e4]间隔为A^N,中 ...

随机推荐

  1. AGC037 C Numbers on a Circle【思维】

    题目传送门 题意 这道题被某大佬改编拿来出成考试题,是长这个样子的: 好的,其实这才是真正的题意: 给定初始序列和最终序列,每次选择一个数变成自己和相邻2个数的和.问初始序列是否可以变为最终序列,若可 ...

  2. Java基础/网络经验

    一.Java新特性好文--掘金 1.Java8 新特性指导手册 2.Java 11 已发布,String 还能这样玩 二.Java避坑 1.为什么阿里巴巴不建议在for循环中使用"+&quo ...

  3. mysql——单表查询——分组查询——示例

    一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...

  4. Java中的模板设计模式,太实用了!

    顾名思义,模板设计模式就是将许多公用的常用的代码封装成一个模板,我们只需要实现不同的业务需求的代码,然后和模板组合在一起,那么就得到完整的逻辑. 在我们的日常开发中,常用的模板模式有两种实现方式:继承 ...

  5. python 安装 colorama 控制台输出彩色文字

    pip install colorama from colorama import Back,Fore,Style # 字体颜色print(Fore.LIGHTBLUE_EX,'HelloWorLd' ...

  6. ALS部署Spark集群入坑记

    [Stage 236:> (0 + 0) / 400]17/12/04 09:45:55 ERROR yarn.ApplicationMaster: User class threw excep ...

  7. 链接Caffe,程序报错应用程序无法正常启动(0xc000007b)

    目录 背景 Debug 解决办法 原因(猜想) 总结 重点是介绍了一种排查这个问题的方法. 背景 Windows 下, Caffe 单独编译成库并且安装在路径 Caffe_DIR, 动态链接库 Caf ...

  8. UEditor之斜线表头表格的定制

    效果图: 图1: 图2:

  9. SQLite3中自增主键相关知识总结,清零的方法、INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用

    这篇文章主要介绍了SQLite3中自增主键相关知识总结,清零的方法.INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用等,需要的朋友可以参考下 一.SQLite清空表 ...

  10. MySQL安装+Navicat_Premium(安装+破解)+Navicat_Premium中MySQL的localhost不能正常连接+不能连接Docker启动容器中的MySQL

    MySQL安装 安装MySQL 我这里安装的是 MySQL 8.0 Command Line Client 下载+安装 详情见 https://www.cnblogs.com/taopanfeng/p ...