UVA514 Rails (stack)
2017-10-19 22:41
531 查看
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=455
题意:从A方向来一个1,2,3,4.....N顺序的列车,经过车站,输入一个从B出来的列车的编号a1,a2,a3,a4....an,问从B出来的列车编号是否合法。对于车站来说,只能够从A进从B出,每次只能够有一个操作(从A进或者从B出,还可以待在车站);
思路:用栈来模拟;
详细看下面代码:
#include <cstdio>
#include <stack>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a[1100],vis[1100];
stack<int > sa;
int main(){
while(~scanf("%d",&n)){
while(~scanf("%d",&a[1])){
if(!a[1]){
printf("\n");
break;
}
while(!sa.empty()) sa.pop();
for(int i = 2; i <= n; i ++) scanf("%d",&a[i]);
memset(vis,0,sizeof(vis));
int cnt = 0, k = 1;
for(int i = 1; i <= n && k <= n;){//判断第一个与第一个出来的车相等的编号
if(a[i] == k){
vis[k] = 1;
cnt ++,k ++, i ++;
while(!sa.empty() && a[i] == sa.top()){//第一个车出车站后,判断车站内的其他车是否是第2,3个出车站的
sa.pop(); i ++;
}
continue;
}
while(a[i] != k && k <= n){//编号为k的车不该出车站则要停留在车站内,即入栈操作
sa.push(k); k ++;
}
}
k = 1;
while(!sa.empty()){//判断车站内剩的其他车是否会和B出站的车的编号顺序一样
if(!vis[a[k]] && sa.top() == a[k])sa.pop(),k ++;
else if(vis[a[k]]) k ++;
else break;
}
if(sa.empty()) printf("Yes\n");//栈空则表示车站内的车全部从B出去
else printf("No\n");
}
}
return 0;
}
题意:从A方向来一个1,2,3,4.....N顺序的列车,经过车站,输入一个从B出来的列车的编号a1,a2,a3,a4....an,问从B出来的列车编号是否合法。对于车站来说,只能够从A进从B出,每次只能够有一个操作(从A进或者从B出,还可以待在车站);
思路:用栈来模拟;
详细看下面代码:
#include <cstdio>
#include <stack>
#include <cstring>
#include <algorithm>
using namespace std;
int n,a[1100],vis[1100];
stack<int > sa;
int main(){
while(~scanf("%d",&n)){
while(~scanf("%d",&a[1])){
if(!a[1]){
printf("\n");
break;
}
while(!sa.empty()) sa.pop();
for(int i = 2; i <= n; i ++) scanf("%d",&a[i]);
memset(vis,0,sizeof(vis));
int cnt = 0, k = 1;
for(int i = 1; i <= n && k <= n;){//判断第一个与第一个出来的车相等的编号
if(a[i] == k){
vis[k] = 1;
cnt ++,k ++, i ++;
while(!sa.empty() && a[i] == sa.top()){//第一个车出车站后,判断车站内的其他车是否是第2,3个出车站的
sa.pop(); i ++;
}
continue;
}
while(a[i] != k && k <= n){//编号为k的车不该出车站则要停留在车站内,即入栈操作
sa.push(k); k ++;
}
}
k = 1;
while(!sa.empty()){//判断车站内剩的其他车是否会和B出站的车的编号顺序一样
if(!vis[a[k]] && sa.top() == a[k])sa.pop(),k ++;
else if(vis[a[k]]) k ++;
else break;
}
if(sa.empty()) printf("Yes\n");//栈空则表示车站内的车全部从B出去
else printf("No\n");
}
}
return 0;
}
相关文章推荐
- 铁轨Rails UVA514(stack运用)
- 铁轨Rails UVA514(stack运用)
- UVa--514 Rails (stack)
- UVa 514 (stack的使用) Rails
- stack&&UVa514 Rails (铁轨)的理解与解析
- UVa - 514 - Rails(栈-stack)
- UVa 514 Rails(stack)
- Rails UVA - 514
- UVa 514: Rails
- Rails UVA 514(栈模拟,水题)
- UVA-514 Rails
- UVA - 514 Rails
- 铁轨(Rails,ACM/ICPC CERC 1997.UVa 514)
- UVa 514 Rails(经典栈)
- UVA514 Rails(铁轨)
- uva 514 Rails
- UVA514:Rails(铁轨)
- Uva - 514 - Rails
- UVa 514 Rails(经典栈)
- Uva 514 Rails