zoukankan      html  css  js  c++  java
  • nyist 93 汉诺塔(三)

    题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=93

    判断给你的操作是否满足要求:

    使用三个栈来操作,模拟该过程

      1 #include<stdio.h>
      2 #include <string.h>
      3 
      4 #define N 105
      5 
      6 int a[4][N];
      7 int f[N][2];
      8 
      9 void init(int n)//初始化栈  第一根柱子
     10 {
     11     memset(a,0,sizeof(a));
     12 
     13     int i;
     14     int t = 1;
     15     for(i = n; i >0; i--)
     16       a[1][t++] = i;
     17 }
     18 
     19 void judge(int n,int m)
     20 {
     21     int i;
     22     int j;
     23     int t_a = n;
     24     int t_b = 0;
     25     int t_c = 0;
     26     int flag1 = 1;
     27     int flag = 0;
     28     for(i =0; i < m; i++)
     29     {
     30         flag = 0;
     31        switch(f[i][0])
     32        {
     33            case 1:
     34                 if(t_a <= 0)
     35                   {
     36 
     37                       flag1 = 0;
     38                       flag = 1;
     39                         break;
     40                   }
     41                 else
     42                 {
     43                     switch(f[i][1])
     44                     {
     45                         case 2:
     46                              if(a[2][t_b] < a[1][t_a] && a[2][t_b])
     47                                {
     48                                    flag = 1;
     49                                    flag1 = 0;
     50                                    break;
     51                                }
     52                                else
     53                                {
     54                                    a[2][++t_b] = a[1][t_a--];
     55                                    break;
     56                                }
     57                         case 3:
     58                             if(a[3][t_c] < a[1][t_a] && a[3][t_c])
     59                              {
     60                                  flag = 1;
     61                                  flag1 = 0;
     62                                  break;
     63                              }
     64                              else
     65                              {
     66                                  a[3][++t_c] = a[1][t_a--];
     67 
     68                                  break;
     69                              }
     70                     }
     71                     break;
     72                 }
     73            case 2:
     74               if(t_b <= 0)
     75               {
     76 
     77                   flag = 1;
     78                   flag1 = 0;
     79                   break;
     80               }
     81               else
     82               {
     83                   switch(f[i][1])
     84                   {
     85                       case 1:
     86                         if(a[1][t_a] < a[2][t_b] && a[1][t_a])
     87                          {
     88                              flag = 1;
     89                              flag1 = 0;
     90                              break;
     91                          }
     92                          else
     93                          {
     94                              a[1][++t_a] = a[2][t_b--];
     95                              break;
     96                          }
     97                       case 3:
     98                         if(a[3][t_c] < a[2][t_b] && a[3][t_c])
     99                           {
    100                               flag = 1;
    101                               flag1 = 0;
    102                               break;
    103                           }
    104                           else
    105                           {
    106                               a[3][++t_c] = a[2][t_b--];
    107                               break;
    108                           }
    109                   }
    110                   break;
    111               }
    112            case 3:
    113              if(t_c <= 0)
    114              {
    115                  flag = 1;
    116                  flag1 = 0;
    117                  break;
    118              }
    119              else
    120              {
    121                  switch(f[i][1])
    122                  {
    123                      case 1:
    124                          if(a[1][t_a] < a[3][t_c] && a[1][t_a])
    125                            {
    126                                flag = 1;
    127                                flag1 = 0;
    128                                break;
    129                            }
    130                            else
    131                            {
    132                                a[1][++t_a]  = a[3][t_c--];
    133                                break;
    134                            }
    135                      case 2:
    136                        if(a[2][t_b] < a[3][t_c] && a[2][t_b])
    137                         {
    138                             flag = 1;
    139                             flag1 = 0;
    140                             break;
    141                         }
    142                         else
    143                         {
    144                             a[2][++t_b] = a[3][t_c--];
    145                             break;
    146                         }
    147                  }
    148                  break;
    149              }
    150        }
    151        if(flag)
    152        {
    153            printf("illegal\n");
    154            break;
    155        }
    156     }
    157     /*
    158     for(j = 0; j <= t_a; j++)
    159      printf("%d    ",a[1][j]);
    160      printf("\n");
    161    for(j = 0; j <= t_b; j++)
    162      printf("%d    ",a[2][j]);
    163      printf("\n");
    164    for(j = 0; j <= t_c; j++)
    165      printf("%d    ",a[3][j]);
    166      printf("\n");
    167     */
    168     if(flag1)
    169       printf("legal\n");
    170 }
    171 int main()
    172 {
    173     int T;
    174     scanf("%d",&T);
    175     while(T--)
    176     {
    177         memset(f,0,sizeof(f));
    178 
    179         int n,m;
    180         scanf("%d%d",&n,&m);
    181         init(n);
    182         int i;
    183         for(i = 0; i < m; i++)
    184           scanf("%d%d",&f[i][0],&f[i][1]);
    185         judge(n,m);
    186     }
    187     return 0;
    188 }
  • 相关阅读:
    Codeforces Round #589 (Div. 2) D. Complete Tripartite(染色)
    Codeforces Round #589 (Div. 2) C
    Codeforces Round #589 (Div. 2) B. Filling the Grid
    Codeforces Round #589 (Div. 2) A. Distinct Digits
    Codeforces Round #590 (Div. 3) E. Special Permutations
    常见类
    集合中元素大小的可排序问题
    集合练习——Map部分
    集合练习——Set部分
    集合练习——List部分
  • 原文地址:https://www.cnblogs.com/yyroom/p/3040625.html
Copyright © 2011-2022 走看看