ECNU_1082//火车调度,在每个数后,小于它的数必须以逆序排列。此题的另一解法是用栈模拟。
 #include<iostream>
#include<iostream>
 using namespace std;
using namespace std;
 int main()
int main()


 {
{
 int T,n,i,j,temp,cur;
  int T,n,i,j,temp,cur;
 bool flag;
  bool flag;
 int s[10];
  int s[10];
 char c;
  char c;
 scanf("%d",&T);
  scanf("%d",&T);
 while(T--)
  while(T--)

 
   {
{
 scanf("%d",&n);
     scanf("%d",&n);
 flag = false;
     flag = false;
 getchar();
     getchar();
 for(i = 0; i < n; i++)
     for(i = 0; i < n; i++)

 
      {
{
 c = getchar();
         c = getchar();
 s[i] = c - '0';
         s[i] = c - '0';
 }
     }
 for(i = 0 ; i < (n-2); i ++)
     for(i = 0 ; i < (n-2); i ++)

 
      {
{
 cur = s[i];
         cur = s[i];
 for(j = i+1; j < n; j++)
         for(j = i+1; j < n; j++)

 
          {
{
 if(s[j] < s[i])
             if(s[j] < s[i])

 
              {
{
 if(s[j] < cur)
                if(s[j] < cur)
 cur = s[j];
                    cur = s[j];
 else
                else

 
                 {
{
 flag = true;
                    flag = true;
 break;
                    break;
 }
                }
 }
             }
 
             
 }
         }
 if(flag)
         if(flag)
 break;
             break;
 }
     }
 if(flag)
     if(flag)
 puts("no");
         puts("no");
 else
     else
 puts("yes");
         puts("yes");
 }
  }
 }
}//HDU_1022,用栈模拟,pop,push 2个操作轮流看是否可以进行,都不行则说明不可行。因为要输出过程。否则可以按Order1中数字出现的次序重新定义Order2中的数字,然后采用ECNU_1082的方法,构成第2种解法。
 #include<iostream>
#include<iostream>
 using namespace std;
using namespace std;
 int main()
int main()


 {
{
 int n,i,j,ohead,stail,in_our_cur;
   int n,i,j,ohead,stail,in_our_cur;
 int o1[10];
   int o1[10];
 int o2[10];
   int o2[10];
 int s[10];
   int s[10];
 int in_our[20];
   int in_our[20];
 bool flag;
   bool flag;
 while(scanf("%d",&n)!=EOF)
   while(scanf("%d",&n)!=EOF)

 
    {
{
 getchar();
      getchar();
 for(i = 0; i < n; i++)
      for(i = 0; i < n; i++)
 o1[i] = getchar()-'0';
          o1[i] = getchar()-'0';
 getchar();
      getchar();
 for(i = 0; i < n; i++)
      for(i = 0; i < n; i++)
 o2[i] = getchar()-'0';
          o2[i] = getchar()-'0';
 flag = false;
      flag = false;
 ohead = 0;
      ohead = 0;
 stail = -1;
      stail = -1;
 in_our_cur = 0;
      in_our_cur = 0;
 for(i = 0; i < n; i++)//o2
      for(i = 0; i < n; i++)//o2

 
       {
{
 if(stail >= 0 && s[stail] == o2[i])
         if(stail >= 0 && s[stail] == o2[i])

 
          {
{
 in_our[in_our_cur++] = 1;//out
           in_our[in_our_cur++] = 1;//out
 stail--;
           stail--;
 continue;
           continue;
 }
         }
 while(o1[ohead] != o2[i] && ohead < n)
         while(o1[ohead] != o2[i] && ohead < n)

 
          {
{
 s[++stail] = o1[ohead];
           s[++stail] = o1[ohead];
 ohead++;
           ohead++;
 in_our[in_our_cur++] = 0;//in
           in_our[in_our_cur++] = 0;//in
 }
         }
 if(ohead == n)
         if(ohead == n)

 
          {
{
 printf("No.\nFINISH\n");
           printf("No.\nFINISH\n");
 flag = true;
           flag = true;
 break;
           break;
 }
         }
 in_our[in_our_cur++] = 0;//in
          in_our[in_our_cur++] = 0;//in
 in_our[in_our_cur++] = 1;//out
          in_our[in_our_cur++] = 1;//out
 ohead++;
          ohead++;
 
         

 }
      }
 if(!flag)
      if(!flag)

 
       {
{
 printf("Yes.\n");
         printf("Yes.\n");
 for(i = 0; i < in_our_cur; i++)
         for(i = 0; i < in_our_cur; i++)

 
          {
{
 if(in_our[i] == 0)
             if(in_our[i] == 0)
 printf("in\n");
                 printf("in\n");
 else
             else
 printf("out\n");
                 printf("out\n");
 }
         }
 printf("FINISH\n");
         printf("FINISH\n");
 }
      }

 }
   }
 }
}