AOJ 0033 Ball【DFS】
有一个筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B管或C管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B管和C管中的球从下往上标号递增。
输入:
第一行输入数据组数N。接下来N行为N组具体数据,每组数据中有10个整数,代表球的放入顺序。
输出:
对于每组数据,若策略存在,输出YES;若不存在,输出NO
解法1:DFS
思路:每次判断当前小球是否大于左边容器的最上端的小球,如果可以就放,否则再去看右边的。一旦发现左右两边都不能放,那就只能判定是NO了。
- #include<cstdio>
- #include<string>
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- typedef long long LL;
- const int INF = 0x7FFFFFFF;
- const int maxn = 1e5 + 10;
- int a[11],vis[11],flag;
- void dfs(int x,int l,int r)
- {
- int i;
- if(x==11)return;
- if(flag)return;
- if(a[x]>l)dfs(x+1,a[x],r);
- else if(a[x]>r)dfs(x+1,l,a[x]);
- else{flag=1;return;}
- }
- int main()
- {
- int T,i,j,k;
- scanf("%d",&T);
- while(T--)
- {
- flag=0;
- for(i=1;i<=10;i++)
- scanf("%d",&a[i]);
- memset(vis,0,sizeof(vis));
- dfs(1,0,0);
- if(flag)printf("NO\n");
- else printf("YES\n");
- }
- return 0;
- }
解法2:二进制枚举
思路:看作0,1序列
- #include<cstdio>
- #include<cstring>
- int a[15], l[15], r[15], t, i, j, lc, rc, cnt;
- bool vis[15], flag;
- bool solve()
- {
- for (i = 0; i < 1024; ++i)
- {
- memset(l, 0, sizeof(l));
- memset(r, 0, sizeof(r));
- lc = rc = 0;
- for (cnt = 0, j = i; cnt < 10; ++cnt, j >>= 1)
- {
- if (j & 1) l[lc++] = a[cnt];
- else r[rc++] = a[cnt];
- }
- flag = true;
- for (j = 1; j < lc; ++j)
- if (l[j] < l[j - 1])
- {
- flag = false;
- break;
- }
- if (flag)
- for (j = 1; j < rc; ++j)
- if (r[j - 1] > r[j])
- {
- flag = false;
- break;
- }
- if (flag) return true;
- }
- return false;
- }
- int main()
- {
- scanf("%d", &t);
- while (t--)
- {
- memset(vis, 0, sizeof(vis));
- for (i = 0; i < 10; ++i)
- scanf("%d", &a[i]);
- puts(solve() ? "YES" : "NO");
- }
- return 0;
- }
bitset增强版
- #include <iostream>
- #include <bitset>
- #include <algorithm>
- using namespace std;
- int main()
- {
- int n;
- cin >> n;
- while (n--)
- {
- int ball[10];
- for (int i = 0; i < 10; ++i)
- {
- cin >> ball[i];
- }
- bitset<10> direction;
- int all = 1024;
- while (all-- > 0)
- {
- direction = static_cast<bitset<10> >(all);
- bool perfect = true;
- int left = 0;
- int right = 0;
- for (int i = 0; i < 10; ++i)
- {
- if (direction[i])
- {
- if (ball[i] > left)
- {
- left = ball[i];
- }
- else
- {
- perfect = false;
- break;
- }
- }
- else
- {
- if (ball[i] > right)
- {
- right = ball[i];
- }
- else
- {
- perfect = false;
- break;
- }
- }
- }
- if (perfect)
- {
- break;
- }
- }
- if (all >= 0)
- {
- cout << "YES" << endl;
- }
- else
- {
- cout << "NO" << endl;
- }
- }
- return 0;
- }
AOJ 0033 Ball【DFS】的更多相关文章
- aoj 0033 Ball【dfs/枚举】
有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下 ...
- 【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
目录:1.潜伏者 [map] 2.Hankson的趣味题[数论]3.mayan游戏[dfs] 题目: 1. 潜伏者(spy.pas/c/cpp)[问题描述]R 国和S 国正陷入战火之中,双方都互派间谍 ...
- Kattis - glitchbot 【DFS】
Kattis - glitchbot [DFS] 题意 有一个机器人 刚开始在(0, 0),然后给出一个目标点,并且会给出一系列指令,但是其中会有一个指令是错误的.我们需要找出那个指令,并且改成正确的 ...
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【dfs】P1331 海战
题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...
- 【dfs】p1731 生日蛋糕
1441:[例题2]生日蛋搞 [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高 ...
- 【dfs】LETTERS
1212:LETTERS [题目描述] 给出一个roe×colroe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母.问最多可以经过几个字母. [ ...
- 洛谷P1605 迷宫【dfs】
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...
- 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名
[题目大意] 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序,约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他 ...
随机推荐
- 利用vim查看日志,快速定位问题
起因 在一般的情况下,如果开发过程中测试报告了一个问题,我一般会这么做: 1.在自己的开发环境下重试一下测试的操作,看看能不能重现问题.不行转2 2.数据库连接池改成测试库的地址,在自己的开发环境下重 ...
- DNA解链统计物理
来源:Kerson Huang, Lectures on Statistical Physics and Protein Folding, pp 24-25 把双链DNA解开就像拉拉链.设DNA有\( ...
- 【WP8.1】类似“IT之家” 自定义消息 的实现
曾经在WP7.WP8下的消息 使用的都是Coding4Fun.Phone.Toolkit里面的ToastPrompt类来实现的. 现在我们来自己做个类似IT之家的这种效果:从右边弹出,经过几秒后会自动 ...
- Postgresql 简单配置 (ubuntu server 14.04.3)
安装和配置 ubuntu server 已经自动安装了progresql,故安装步骤就省略 初始postgresql没有密码,不能使用,需要先设置密码,命令(从网上随意找的)如下: sudo su p ...
- GFF3格式文件
GFF3是GFF注释文件的新标准.文件中每一行为基因组的一个属性,分为9列,以TAB分开. 依次是: 1. reference sequence:参照序列 指出注释的对象.如一个染色体,克隆或片段.可 ...
- Java上等价类划分测试的实现
利用JavaFx实现对有效等价类和无效等价类的划分: 代码: import javafx.application.Application;import javafx.event.ActionEvent ...
- 【转】将Oracle数据库设置为归档模式
查看归档状态为非归档sys@JSSBOOK> select log_mode from v$database;LOG_MODE------------NOARCHIVELOG archive状态 ...
- 2017《时间的朋友》罗振宇跨年演讲ppt
2016年12月31日晚,罗辑思维的罗振宇将在深圳湾春茧体育馆进行2017<时间的朋友>跨年演讲,很多网友一直在找直播的地址还是没找到,现在ytkah就第一时间分享一些精彩ppt弥补网友的 ...
- Doctype的作用
<!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令,也就是定义文档类型. 所有的浏览器都需要两种模式:怪异模式和严格模式 ...
- windows下用visual studio code 调试go代码
http://www.golangtc.com/download下载安装包或压缩包 配置环境变量 配置GOROOT: 配置PATH:在PATH最后添加 配置GOPATH:GOPATH的作用请自行百度, ...