您的位置:首页 > 大数据 > 人工智能

ZOJ 1259 Rails

2013-05-21 16:40 302 查看
主要用到了栈.

规定每节车厢只能进出栈一次.所以可以对于每一节目标车厢tar[i],用j表示当前要入栈的车厢.

如果tar[i]>=j 表示tar[i]只能从未入栈的车厢中找,直到找到直接拿走,中间的那些车厢全部入栈,

如果tar[i]<j,表示tar[i]只能从栈中找,很明显必须是栈顶那节车厢,如果不是的话那么这栈顶的这节车厢就相当于被抛弃掉了,就达不到目标了.

#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1005;
int target[maxn], stak[maxn], n;
int main(){
while(~scanf("%d", &n) && n){
while(1){
int i = 1, j = 1, top = 0, f = 1;
scanf("%d", &target[i]);
if(!target[i++])break;
for(; i <= n; ++i){
scanf("%d", &target[i]);
}
for(i = 1; i <= n; ++i){
if(target[i] >= j){
int found = 0;
while(j <= n){
if(j++ == target[i]){
found = 1;
break;
}
stak[top++] = j - 1;
}
if(!found){
f = 0;
break;
}
}else{
top--;
if(top < 0 || stak[top] != target[i]){
f = 0;
break;
}
}
}
if(f){
printf("Yes\n");
}else{
printf("No\n");
}
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: