细草微风岸

平凡而不平庸

常用链接

统计

最新评论

ECNU_1802_HDU_1022 铁路调度

ECNU_1082//火车调度,在每个数后,小于它的数必须以逆序排列。此题的另一解法是用栈模拟。
#include<iostream>
using namespace std;
int main()
{
  
int T,n,i,j,temp,cur;
  
bool flag;
  
int s[10];
  
char c;
  scanf(
"%d",&T);
  
while(T--)
  
{
     scanf(
"%d",&n);
     flag 
= false;
     getchar();
     
for(i = 0; i < n; i++)
     
{
         c 
= getchar();
         s[i] 
= c - '0';
     }

     
for(i = 0 ; i < (n-2); i ++)
     
{
         cur 
= s[i];
         
for(j = i+1; j < n; j++)
         
{
             
if(s[j] < s[i])
             
{
                
if(s[j] < cur)
                    cur 
= s[j];
                
else
                
{
                    flag 
= true;
                    
break;
                }

             }

             
         }

         
if(flag)
             
break;
     }

     
if(flag)
         puts(
"no");
     
else
         puts(
"yes");
  }

}


//HDU_1022,用栈模拟,pop,push 2个操作轮流看是否可以进行,都不行则说明不可行。因为要输出过程。否则可以按Order1中数字出现的次序重新定义Order2中的数字,然后采用ECNU_1082的方法,构成第2种解法。

#include<iostream>
using namespace std;
int main()
{
   
int n,i,j,ohead,stail,in_our_cur;
   
int o1[10];
   
int o2[10];
   
int s[10];
   
int in_our[20];
   
bool flag;
   
while(scanf("%d",&n)!=EOF)
   
{
      getchar();
      
for(i = 0; i < n; i++)
          o1[i] 
= getchar()-'0';
      getchar();
      
for(i = 0; i < n; i++)
          o2[i] 
= getchar()-'0';
      flag 
= false;
      ohead 
= 0;
      stail 
= -1;
      in_our_cur 
= 0;
      
for(i = 0; i < n; i++)//o2
      {
         
if(stail >= 0 && s[stail] == o2[i])
         
{
           in_our[in_our_cur
++= 1;//out
           stail--;
           
continue;
         }

         
while(o1[ohead] != o2[i] && ohead < n)
         
{
           s[
++stail] = o1[ohead];
           ohead
++;
           in_our[in_our_cur
++= 0;//in
         }

         
if(ohead == n)
         
{
           printf(
"No.\nFINISH\n");
           flag 
= true;
           
break;
         }

          in_our[in_our_cur
++= 0;//in
          in_our[in_our_cur++= 1;//out
          ohead++;
         

      }

      
if(!flag)
      
{
         printf(
"Yes.\n");
         
for(i = 0; i < in_our_cur; i++)
         
{
             
if(in_our[i] == 0)
                 printf(
"in\n");
             
else
                 printf(
"out\n");
         }

         printf(
"FINISH\n");
      }


   }

}

posted on 2011-07-26 23:48 鲍青 阅读(319) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理