zoj 1259 Rails.

头一次栈接触这东西,纠结了我四五天。。

刚开始是没理解题,没注意reorganize的意思....重组啊!!!神马是重组,就是乱七八糟的呗``

进的时候是1,2,3,4,5……,可以不在C中停留,一个一个进的话,到B中就是1,2,3,4,5……

要是几组的话,情况就多了,C中会有积累。例如B是3,2,1,4,5.那么就是123|4|5

学了不少,但主要的还是栈的思想

代码层面嘛,那个0比较有意思。

就这些吧,上代码


  
  

#include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #include <algorithm> using namespace std; int main() {   int stack[1005], A, top;    //栈,也就是C车站   int station_B[1005],B;        //进B的顺序,也就是出栈的顺序     int n, i;     int ok = 1;         start:;     scanf("%d", &n);     while( n )     {    memset(station_B,0,sizeof(station_B));    ok = 1;    scanf("%d", &station_B[1]);    if (station_B[1] == 0)         //当B[1]为0,换车厢数n,goto到scanf n     {     printf("\n");     goto start;    }    else    {     for (i = 2; i <= n; i++)       {      scanf("%d", &station_B[i]);          }       A = B = 1;     top = 0; //注意top初值     while (B <= n)                      //进栈顺序是1 2 3 4 5     {     if (station_B[B] == A)          //若B【】==A,说明进一个就出一个,栈里没有存      {       A++;       B++;      }      else if (top && station_B[B] == stack[top])  //栈的最顶元素在B[]中找到(位于最后一个单个进入的后面),若相等的话      {               //top向下,B向右,再判断更早的元素stack[top-1]是否还等于b[B+1]       B++;       top--;      }       else if (A <= n)               //B【】!=A,说明栈里有存数,并且是从小到大存,1,2,3...因为进栈是那个顺序      {       stack[++top] = A++;       //从小到大进栈      }      else      {       ok = 0;       break;      }     }    }    printf("%s\n", ok ? "Yes" : "No");         }   system("pause");   return 0;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值