UVa
来源:互联网 发布:什么是seo是什么 编辑:程序博客网 时间:2024/05/29 12:53
UVa - 514 Rails ( 栈 )
水题
数据结构 : 栈
题意
输入一个整数N表示火车的数量,且栈A内火车按顺序排列( A栈栈首是1,栈尾是N ) ; 接下来给出1 - N的排列表示希望达成的栈B内的火车顺序 , 火车只能由A → B 或者 A → C(暂存) → B . 问给出的栈B序列能否达成
[ UVA - 514 (VJ) ]
思路
用三个栈 A B C 表示 铁路A 铁路B 车站C
一个目标数组 target[] 记录希望达成的栈B内的火车顺序
用栈C是否为空来判断是否能达成目标数组
记录
第一次学习数据结构对栈的一些操作还不是很熟练
在这里记录一下栈的基本知识
//C++中栈的头文件#include <stack>
< c++栈的方法的基本用法 >
push() : 向栈内压入一个成员;
pop() : 从栈顶弹出一个成员;
empty() : 如果栈为空返回true,否则返回false;
top() : 返回栈顶,但不删除成员;
size() : 返回栈内元素的大小 ;
AC代码
/* 只有A→C/C→B两种走法*/#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <stack> //栈 后入先出using namespace std;#define maxn 1000 + 10int target[maxn];int main(){ int n; //int nn = 0; while( scanf("%d",&n) && n ) { stack<int> A,B,C; //三个栈 memset( target, 0, sizeof(target) ); while( cin >> target[0] && target[0] ) { for( int i = n ; i >= 1 ; i-- ) //顺序入栈A A.push(i); for( int i = 1 ; i < n ; i++ ) //存入目标数列 cin >> target[i]; for( int i = 0 ; i < n ; i++ ) { //printf("i=%d\n",i); if( A.empty() && C.top() != target[i] ) //A栈已空且B栈未满 break; //如果C栈有元素且栈首 == 目标 while( !C.empty() && C.top() == target[i] ){ B.push(C.top()); //将C栈首推入B C.pop(); //并将C栈首弹出 target[i] = 0; i++; } //如果C中无元素或者C栈首 != 目标 , 从A栈首拿出火车放入C/B中 if( !A.empty() ){ if( A.top() == target[i] ){ B.push(A.top()); target[i] = 0; } else C.push(A.top()); A.pop(); } if( target[i] != 0 ) i--; //printf("A.size = %d\n",A.size()); //printf("B.size = %d\n",B.size()); //printf("C.size = %d\n",C.size()); } //puts("out"); //printf("%d\n",C.size()); if( C.empty() ) cout << "Yes" << endl ; else cout << "No" << endl ; //清空BC栈 while( !B.empty() ) B.pop(); while( !C.empty() ) C.pop(); } puts(""); /* 本来特殊处理了回车 没料到PE 只能最后统一输出一个回车才AC 再看题目要求 "In addition, there is one empty line after the lines corresponding to one block of the input file." 这里就是不需要特处理回车 每次直接回车即可 */ } return 0;}
阅读全文
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- TabLayout的一些使用
- 《AV Foundation 开发秘籍》读书笔记(三)
- linux如何判断服务器是否被入侵
- docker远程api的使用
- POJ-3259 Wormholes
- UVa
- python
- 机器学习中的高斯过程
- 菜鸟教程中TCP/IP教程Word版
- 遇见《凯哥自媒体赚钱秘籍》—原来这才是我最想要的日子
- Windows 下编译 OpenSSL 32&64
- 阿里资深专家专访:流量清洗与人工智能
- 微信支付:curl出错,错误码:60
- Linux驱动开发常用调试工具---之内存读写工具devmem