有一个筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B管或C管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B管和C管中的球从下往上标号递增。

输入:

第一行输入数据组数N。接下来N行为N组具体数据,每组数据中有10个整数,代表球的放入顺序。

输出:

对于每组数据,若策略存在,输出YES;若不存在,输出NO

解法1:DFS

思路:每次判断当前小球是否大于左边容器的最上端的小球,如果可以就放,否则再去看右边的。一旦发现左右两边都不能放,那就只能判定是NO了。

  1. #include<cstdio>
  2. #include<string>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<algorithm>
  6. using namespace std;
  7. typedef long long LL;
  8. const int INF = 0x7FFFFFFF;
  9. const int maxn = 1e5 + 10;
  10.  
  11. int a[11],vis[11],flag;
  12.  
  13. void dfs(int x,int l,int r)
  14. {
  15. int i;
  16. if(x==11)return;
  17. if(flag)return;
  18. if(a[x]>l)dfs(x+1,a[x],r);
  19. else if(a[x]>r)dfs(x+1,l,a[x]);
  20. else{flag=1;return;}
  21. }
  22.  
  23. int main()
  24. {
  25. int T,i,j,k;
  26. scanf("%d",&T);
  27. while(T--)
  28. {
  29. flag=0;
  30. for(i=1;i<=10;i++)
  31. scanf("%d",&a[i]);
  32. memset(vis,0,sizeof(vis));
  33. dfs(1,0,0);
  34. if(flag)printf("NO\n");
  35. else printf("YES\n");
  36. }
  37. return 0;
  38. }

解法2:二进制枚举

思路:看作0,1序列

  1. #include<cstdio>
  2. #include<cstring>
  3.  
  4. int a[15], l[15], r[15], t, i, j, lc, rc, cnt;
  5. bool vis[15], flag;
  6.  
  7. bool solve()
  8. {
  9. for (i = 0; i < 1024; ++i)
  10. {
  11. memset(l, 0, sizeof(l));
  12. memset(r, 0, sizeof(r));
  13. lc = rc = 0;
  14. for (cnt = 0, j = i; cnt < 10; ++cnt, j >>= 1)
  15. {
  16. if (j & 1) l[lc++] = a[cnt];
  17. else r[rc++] = a[cnt];
  18. }
  19. flag = true;
  20. for (j = 1; j < lc; ++j)
  21. if (l[j] < l[j - 1])
  22. {
  23. flag = false;
  24. break;
  25. }
  26. if (flag)
  27. for (j = 1; j < rc; ++j)
  28. if (r[j - 1] > r[j])
  29. {
  30. flag = false;
  31. break;
  32. }
  33. if (flag) return true;
  34. }
  35. return false;
  36. }
  37.  
  38. int main()
  39. {
  40. scanf("%d", &t);
  41. while (t--)
  42. {
  43. memset(vis, 0, sizeof(vis));
  44. for (i = 0; i < 10; ++i)
  45. scanf("%d", &a[i]);
  46. puts(solve() ? "YES" : "NO");
  47. }
  48. return 0;
  49. }

bitset增强版

  1. #include <iostream>
  2. #include <bitset>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9. int n;
  10. cin >> n;
  11. while (n--)
  12. {
  13. int ball[10];
  14.  
  15. for (int i = 0; i < 10; ++i)
  16. {
  17. cin >> ball[i];
  18. }
  19.  
  20. bitset<10> direction;
  21. int all = 1024;
  22. while (all-- > 0)
  23. {
  24. direction = static_cast<bitset<10> >(all);
  25. bool perfect = true;
  26. int left = 0;
  27. int right = 0;
  28. for (int i = 0; i < 10; ++i)
  29. {
  30. if (direction[i])
  31. {
  32. if (ball[i] > left)
  33. {
  34. left = ball[i];
  35. }
  36. else
  37. {
  38. perfect = false;
  39. break;
  40. }
  41. }
  42. else
  43. {
  44. if (ball[i] > right)
  45. {
  46. right = ball[i];
  47. }
  48. else
  49. {
  50. perfect = false;
  51. break;
  52. }
  53. }
  54. }
  55. if (perfect)
  56. {
  57. break;
  58. }
  59. }
  60.  
  61. if (all >= 0)
  62. {
  63. cout << "YES" << endl;
  64. }
  65. else
  66. {
  67. cout << "NO" << endl;
  68. }
  69. }
  70.  
  71. return 0;
  72. }

AOJ 0033 Ball【DFS】的更多相关文章

  1. aoj 0033 Ball【dfs/枚举】

    有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下 ...

  2. 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】

    目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...

  3. Kattis - glitchbot 【DFS】

    Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...

  4. HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))

    度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. 【dfs】P1331 海战

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...

  6. 【dfs】p1731 生日蛋糕

    1441:[例题2]生日蛋搞 [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高 ...

  7. 【dfs】LETTERS

    1212:LETTERS [题目描述] 给出一个roe×colroe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母.问最多可以经过几个字母. [ ...

  8. 洛谷P1605 迷宫【dfs】

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  9. 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名

    [题目大意] 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序,约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他 ...

随机推荐

  1. 利用vim查看日志,快速定位问题

    起因 在一般的情况下,如果开发过程中测试报告了一个问题,我一般会这么做: 1.在自己的开发环境下重试一下测试的操作,看看能不能重现问题.不行转2 2.数据库连接池改成测试库的地址,在自己的开发环境下重 ...

  2. DNA解链统计物理

    来源:Kerson Huang, Lectures on Statistical Physics and Protein Folding, pp 24-25 把双链DNA解开就像拉拉链.设DNA有\( ...

  3. 【WP8.1】类似“IT之家” 自定义消息 的实现

    曾经在WP7.WP8下的消息 使用的都是Coding4Fun.Phone.Toolkit里面的ToastPrompt类来实现的. 现在我们来自己做个类似IT之家的这种效果:从右边弹出,经过几秒后会自动 ...

  4. Postgresql 简单配置 (ubuntu server 14.04.3)

    安装和配置 ubuntu server 已经自动安装了progresql,故安装步骤就省略 初始postgresql没有密码,不能使用,需要先设置密码,命令(从网上随意找的)如下: sudo su p ...

  5. GFF3格式文件

    GFF3是GFF注释文件的新标准.文件中每一行为基因组的一个属性,分为9列,以TAB分开. 依次是: 1. reference sequence:参照序列 指出注释的对象.如一个染色体,克隆或片段.可 ...

  6. Java上等价类划分测试的实现

    利用JavaFx实现对有效等价类和无效等价类的划分: 代码: import javafx.application.Application;import javafx.event.ActionEvent ...

  7. 【转】将Oracle数据库设置为归档模式

    查看归档状态为非归档sys@JSSBOOK> select log_mode from v$database;LOG_MODE------------NOARCHIVELOG archive状态 ...

  8. 2017《时间的朋友》罗振宇跨年演讲ppt

    2016年12月31日晚,罗辑思维的罗振宇将在深圳湾春茧体育馆进行2017<时间的朋友>跨年演讲,很多网友一直在找直播的地址还是没找到,现在ytkah就第一时间分享一些精彩ppt弥补网友的 ...

  9. Doctype的作用

    <!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令,也就是定义文档类型. 所有的浏览器都需要两种模式:怪异模式和严格模式 ...

  10. windows下用visual studio code 调试go代码

    http://www.golangtc.com/download下载安装包或压缩包 配置环境变量 配置GOROOT: 配置PATH:在PATH最后添加 配置GOPATH:GOPATH的作用请自行百度, ...