ZOJ 1259 Rails
2013-05-21 16:40
302 查看
主要用到了栈.
规定每节车厢只能进出栈一次.所以可以对于每一节目标车厢tar[i],用j表示当前要入栈的车厢.
如果tar[i]>=j 表示tar[i]只能从未入栈的车厢中找,直到找到直接拿走,中间的那些车厢全部入栈,
如果tar[i]<j,表示tar[i]只能从栈中找,很明显必须是栈顶那节车厢,如果不是的话那么这栈顶的这节车厢就相当于被抛弃掉了,就达不到目标了.
规定每节车厢只能进出栈一次.所以可以对于每一节目标车厢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; }
相关文章推荐
- zoj 1259 Rails
- zoj 1259 Rails.
- zoj 1259 Rails
- zoj 1259 || poj 1363 Rails(栈~!)
- zoj 1259 || poj 1363 rails(栈)
- ZOJ 1259 Rails
- zoj1259-Rails
- ZOJ-1259-Rails
- ZOJ-1259-Rails
- ZOJ Problem Set -1259 Rails
- ZOJ 1259(Rails)
- ZOJ 1259_Rails
- zoj - 1259 - Rails
- ZOJ Problem Set -1259 Rails
- zoj - 1259 - Rails
- ZOJ-1259 输出所有的出站情况
- zoj 1259
- ZOJ-1259
- ZOJ 1259
- 在ubuntu下安装ruby on rails环境