HDU1022 Train Problem I

2691 단어
제목 대의: 물 문제 하나, 하지만 자신 은 매우 물, 그래서 꽤 오래 시 뮬 레이 션 했 습 니 다. 멘 붕. 창고 시 뮬 레이 션.
창고 3 개 를 열 었 습 니 다.
oo2 기차 가 떠 나 도록 요구 하 는 순 서 를 저장 합 니 다.
oo3 기차 가 역 에 들 어 오 는 순 서 를 모 의 한다.
oo1 은 보조 창고 로 역 에 들 어 오 는 첫 열 차 를 편리 하 게 추출 하기 위해 서 입 니 다.
데이터 구 조 를 배 울 때 위조 코드 를 잘 쓰 지 못 해서 모 의 사고 가 처음에는 엉망 이 되 었 다. 나중에 진실 을 확인 하고 위조 코드 를 한 번 쓰 면 생각 이 훨씬 뚜렷 해 졌 다.
(1) 만약 에 oo3 창고 가 비어 있 지 않 고 창고 꼭대기 원소 와 oo2 창고 꼭대기 원소 가 같다 면 두 창고 모두 창고 가 같 지 않 을 때 까지 튕 기기 시작한다.
(2) 만약 에 oo3 스 택 이 비어 있 지 않 고 oo3 스 택 의 정상 요소 와 oo2 스 택 의 정상 요소 가 같 지 않 으 면 보조 스 택 oo1 이 비어 있 습 니 다 (기차 가 모두 역 에 들 어 왔 음 을 의미 합 니 다)
  그러면 제 공 된 입장 순서 가 합 리 적 이지 않 고 직접 표지 가 실 패 했 습 니 다.
(3) 세 개의 창고 가 모두 비어 있 으 면 표지 가 성공 적 으로 튀 어 나 옵 니 다.
(4) 남 은 것 은 oo3 스 택 의 꼭대기 요소 와 oo2 스 택 의 꼭대기 요소 가 같 지 않 고 보조 스 택 이 아직 비어 있 지 않다 는 것 은 기차 가 역 에 들 어 갈 수 있다 는 것 을 의미한다. 그래서 oo1 은 탄 스 택, oo3 스 택 에 들 어 갈 수 있다.
 
oo3 스 택 에서 스 택 에 들 어 갈 때 활동 상황 을 기록 하고 마지막 으로 스 택 에 들 어 가 는 순 서 를 출력 하면 됩 니 다.
 
AC program:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
int n;
char o1[11],o2[11];
int main()
{
while(~scanf("%d%s%s",&n,o1,o2))   
{
   int s[20],k=0;
   stack<int>oo1,oo2,oo3;                                
   int len1=strlen(o1);
   int len2=strlen(o2);
   for(int i=len1-1;i>=0;i--)
   {
      oo1.push(o1[i]-'0');        
   }
   for(int i=len2-1;i>=0;i--)
   {
      oo2.push(o2[i]-'0');        
   }
   int tmp=oo1.top();
   oo1.pop();
   oo3.push(tmp);
   s[k++]=1;
   bool flag;
   while(1)//oo1    ,oo3 oo2         
   {
      while(!oo3.empty()&&oo3.top()==oo2.top())
      {
          oo3.pop();
          s[k++]=2;
          oo2.pop();   
      }
      if(!oo3.empty()&&oo3.top()!=oo2.top()&&oo1.empty())
      {
         flag=false;                                
         break;
      }       
      else if(oo1.empty()&&oo2.empty()&&oo3.empty())
      {
          flag=true;
          break; 
      }
      else
      {
        tmp=oo1.top();
        oo1.pop();
        oo3.push(tmp);
        s[k++]=1;    
      }
      
   }
   if(flag)
   {
       printf("Yes.
"); for(int i=0;i<k;i++) { if(s[i]==1) printf("in
"); else printf("out
"); } printf("FINISH
"); } else { printf("No.
"); printf("FINISH
"); } } //system("pause"); }

 
 
 

좋은 웹페이지 즐겨찾기