UVa-512(经典栈)
2015-06-30 00:25
260 查看
题目大意:虽然是英文题,但已经是很老的题了,自己百度搜翻译把
解题思路:很显然C车站是一个栈的模型,那么这道题以模拟的思想来做。模拟C车站是一个栈结构,那么对于每一个目标target[i],
都有三种情况:1、当前正当要进站的车正好符合目标,那么直接从A到C,再到B
2、或者当前栈首的车符合目标(不存在栈内符合的情况,若有则该目标不能实现),那么从C到B
3、或者前两种情况都不符合,则只能使当前车暂时入栈,从A到C
其中,要判断还是否有车,若已经没车了但是目标没有达成,那么该目标也实现不了
代码:
复制去Google翻译翻译结果
解题思路:很显然C车站是一个栈的模型,那么这道题以模拟的思想来做。模拟C车站是一个栈结构,那么对于每一个目标target[i],
都有三种情况:1、当前正当要进站的车正好符合目标,那么直接从A到C,再到B
2、或者当前栈首的车符合目标(不存在栈内符合的情况,若有则该目标不能实现),那么从C到B
3、或者前两种情况都不符合,则只能使当前车暂时入栈,从A到C
其中,要判断还是否有车,若已经没车了但是目标没有达成,那么该目标也实现不了
代码:
#include <set> #include <map> #include <list> #include <queue> #include <stack> #include <cmath> #include <string> #include <cstdio> #include <vector> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> //#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; #define PB push_back #define FOR(i,n,m) for(int i=n;i<=m;i++) #define ROF(i,n,m) for(int i=n;i>=m;i--) #define clr(i,j) memset(i,j,sizeof(i)) #define maxn 1005 //#define pi 3.1415926 //#define lson l , m , rt<<1 //#define rson m+1 , r , rt<<1|1 //typedef long long ll; int p[maxn]; int main() { int n; while(scanf("%d",&n),n) { while(scanf("%d",p+1),p[1]) { FOR(i,2,n) scanf("%d",p+i); stack<int>a; int flag=1,i=1,j=1; while(j<=n) { if(i==p[j]) { i++,j++; i=min(i,n); } else if(!a.empty()&&a.top()==p[j])a.pop(),j++; else a.push(i),i++; if(i>n) { flag=0; break; } } printf("%s\n",flag?"Yes":"No"); } puts(""); } return 0; }
复制去Google翻译翻译结果
相关文章推荐
- ImageLoader 线程池 单例 使用模板
- LeetCode Simplify Path
- 2015年6月29日 课设日志
- win7-时间更新
- 2015062910 - 一周搞定Effective java
- android searchView加ListView共同使用
- mysql定时器
- 定义一个功能,记录程序运行的次数。满足5次后,给出提示,试用次数已到,请注册
- 输入框只能输入数字 以及其他限制的总结
- AFNetworking获取服务端plist文件,XML文件
- POJ 3592 强连通缩点+spfa最长路
- 公安项目项目感想
- 注解开发spring-aop 入门
- 2015062909 - 黑鹰坠落
- .Net 自定义事件
- .Net 自定义事件
- 第八十八天 how can I 坚持 angelaJs
- 三范式
- 37条常用Shell命令
- virtualtree 的使用(Delphi)