zoukankan      html  css  js  c++  java
  • Uva



    C是一个栈,每次先检查A的第一个元素是否满足,如果满足,直接进入B;再检查C中栈顶元素是否满足,如果满足,出栈进入B;前两步都不满足将A放入C栈中。循环到B满或者A,C中都不满足条件并且A空,第一种情况成功,第二种情况失败。

    AC代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cctype>
    #include <cstring>
    #include <string>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <bitset> 
    #include <cassert> 
    
    using namespace std;
    
    const int maxn = 1010;
    
    int bRail[maxn];
    
    int main()
    {
    	int n;
    	while (scanf("%d", &n) == 1 && n) {
    		stack<int> s;
    		memset(bRail, 0, sizeof(bRail));
    		
    		while (scanf("%d", &bRail[1]) == 1 && bRail[1]) {
    			for (int i = 2; i <= n; i++) {
    				scanf("%d", &bRail[i]);
    			}
    			int A = 1, B = 1;
    			int ok = 1;
    			while (B <= n) {
    				if (A == bRail[B]) { // 先看A中第一个是否满足B
    					A++;
    					B++;
    				}
    				else if (!s.empty() && s.top() == bRail[B]) { // 再看栈顶车厢是否满足
    					s.pop();
    					B++;
    				}
    				else if (A <= n) { // 都不满足就让A的车厢入栈
    					s.push(A++);
    				}
    				else  { // B没有满,但是没有满足的情况了,失败
    					ok = 0;
    					break;
    				}
    			}
    			printf("%s
    ", ok ? "Yes" : "No");
    		}
    		printf("
    ");
    	}
    
    	return 0;
    }




  • 相关阅读:
    单词翻转
    潜伏者
    8.8-8.9总结
    园艺工人的求助
    灰zhu姑xiao娘mei
    [bzoj] 2724 蒲公英 || 分块
    [poj] 2079 Triangle || 旋转卡壳
    [poj] 3384 Feng Shui || 半平面交
    [poj] 1228 Grandpa's Estate || 稳定凸包
    [poj] 2187 Beauty Contest || 旋转卡壳
  • 原文地址:https://www.cnblogs.com/zhangyaoqi/p/4591576.html
Copyright © 2011-2022 走看看