Solitaire

题目连接:

http://codeforces.com/gym/100231/

Description

给你一个8*8棋盘,里面有4个棋子,每个棋子可以做一下某个操作之一:

1.走向相邻的空格

2.迈过相邻的棋子

然后给你初始状态和结束状态,问你能否得到呢?

Input

第一行给你4个初始状态棋子的坐标

第二行给你4个结束状态棋子的坐标

Output

输出能否从初始状态走到结束状态

Sample Input

4 4 4 5 5 4 6 5

2 4 3 3 3 6 4 6

Sample Output

YES

Hint

题意

题解:

由于是2002年的题,所以大概怎么搜都可以(他们并没有料到10年后的电脑会跑的这么快

我用的是meet in the mid,牺牲空间来换取时间

从终点和起点都搜一遍

这样跑的很快~

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. set<int> T[2];
  4. int dx[4]={1,-1,0,0};
  5. int dy[4]={0,0,1,-1};
  6. struct node
  7. {
  8. vector<pair<int,int> >v;
  9. };
  10. int Bound(pair<int,int> x)
  11. {
  12. if(x.first<1||x.first>8)return 0;
  13. if(x.second<1||x.second>8)return 0;
  14. return 1;
  15. }
  16. int Hit(node tmp,pair<int,int> tt)
  17. {
  18. for(int i=0;i<4;i++)
  19. if(tmp.v[i]==tt)
  20. return 1;
  21. return 0;
  22. }
  23. int Hash(node tmp)
  24. {
  25. int res = 0;
  26. for(int i=0;i<4;i++)
  27. {
  28. res = res*10+tmp.v[i].first;
  29. res = res*10+tmp.v[i].second;
  30. }
  31. return res;
  32. }
  33. void dfs(node st,int step,int flag)
  34. {
  35. sort(st.v.begin(),st.v.end());
  36. if(step==4)
  37. {
  38. T[flag].insert(Hash(st));
  39. return;
  40. }
  41. for(int i=0;i<4;i++)
  42. {
  43. for(int j=0;j<4;j++)
  44. {
  45. pair<int,int> next = st.v[i];
  46. next.first += dx[j];
  47. next.second += dy[j];
  48. if(Hit(st,next))
  49. {
  50. next.first+=dx[j];
  51. next.second+=dy[j];
  52. }
  53. if(!Bound(next))
  54. continue;
  55. node t=st;
  56. t.v[i]=next;
  57. dfs(t,step+1,flag);
  58. }
  59. }
  60. }
  61. int main()
  62. {
  63. node k[2];
  64. for(int i=0;i<2;i++)
  65. for(int j=0;j<4;j++)
  66. {
  67. int x,y;scanf("%d%d",&x,&y);
  68. k[i].v.push_back(make_pair(x,y));
  69. }
  70. dfs(k[0],0,0);
  71. dfs(k[1],0,1);
  72. for(auto it:T[0])
  73. if(T[1].find(it)!=T[1].end())
  74. return puts("YES");
  75. return puts("NO");
  76. }

Codeforces Gym 100231F Solitaire 折半搜索的更多相关文章

  1. codeforces 880E. Maximum Subsequence(折半搜索+双指针)

    E. Maximum Subsequence time limit per test 1 second memory limit per test 256 megabytes input standa ...

  2. Codeforces Gym 100431B Binary Search 搜索+组合数学+高精度

    原题链接:http://codeforces.com/gym/100431/attachments/download/2421/20092010-winter-petrozavodsk-camp-an ...

  3. Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索

    Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec  Memory Limit: 512 MBSubmit: xxx  ...

  4. codeforces 1006 F(折半搜索)

    F. Xor-Paths time limit per test 3 seconds memory limit per test 256 megabytes input standard input ...

  5. CF 888E Maximum Subsequence——折半搜索

    题目:http://codeforces.com/contest/888/problem/E 一看就是折半搜索?……然后排序双指针. 两个<m的数加起来如果>=m,一定不会更新答案.因为- ...

  6. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  7. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  8. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  9. 【LOJ#6072】苹果树(矩阵树定理,折半搜索,容斥)

    [LOJ#6072]苹果树(矩阵树定理,折半搜索,容斥) 题面 LOJ 题解 emmmm,这题似乎猫讲过一次... 显然先\(meet-in-the-middle\)搜索一下对于每个有用的苹果数量,满 ...

随机推荐

  1. spring mvc 异常统一处理方式

    springMVC提供的异常处理主要有两种方式: 一种是直接实现自己的HandlerExceptionResolver: 另一种是使用注解的方式实现一个专门用于处理异常的Controller——Exc ...

  2. Hbase shell详情

    HBase 为用户提供了一个非常方便的使用方式, 我们称之为“HBase Shell”.HBase Shell 提供了大多数的 HBase 命令, 通过 HBase Shell 用户可以方便地创建.删 ...

  3. 解决oracle11g的ORA-12505问题

    今天在使用SQL Developer的时候连不上去,报ORA-12505错误,但是SQLPLUS可以连接. 检查服务名,是OracleServiceORCL,那SID应当就是orcl,但是使用该SID ...

  4. Masonry 固定宽度 等间距

    -(void)makeEqualDisViews:(NSArray *)views inView:(UIView *)containerView LRpadding:(CGFloat)LRpaddin ...

  5. boost的link 和 runtime-link,搭配shared 和 static

    转自:http://blog.csdn.net/yasi_xi/article/details/8660549 link:生成动态链接库/静态链接库.生成动态链接库需使用shared方式,生成静态链接 ...

  6. CListCtrl总结.xml

    pre{ line-height:1; color:#d1653c; background-color:#000000; font-size:16px;}.sysFunc{color:#566d68; ...

  7. webstorm无法格式化

    快捷键失效,一般都是由于快键键冲突引起的.但是像CTRL + ALT + L的组合件冲突,还是没见过. 后来在网上查知,网易云音乐,会引发此冲突,果然高手在网络啊. 打开设置,禁用网易云音乐快捷键,妥 ...

  8. 牛课--C/C++

    引用是除指针外另一个可以产生多态效果的手段. //引用是除指针外另一个可以产生多态效果的手段. #include<iostream> using namespace std; class ...

  9. kali 重置 mysql 密码

    You can recover MySQL database server password with following five easy steps. Step # 1: Stop the My ...

  10. Python的数据处理学习(二)

    本文参考Paul Barry所著的<Head First Python>一书,参考代码均可由http://python.itcarlow.ie/站点下载.本文若有任何谬误希望不吝赐教~ 二 ...