AOJ - Problem 1036 : Monster Factory
探索する必要はなくシミュレーションする問題です。
毎回下端に届いたパッケージの記録からpush_down 命令かpush_right 命令をするか判断します。
最終的に上のラインと左のラインが空になったら右のラインに届いた順に出力します。
今回は文字列でデータを表現しました。
#include <iostream> #include <string> #include <algorithm> using namespace std; int main(){ string top; while( cin >> top , top != "-" ){ string left, right, bottom, result; cin >> left >> result; char center=0; while( !top.empty() || !left.empty() ){ if( center == 0 ){ if( !left.empty() ){ center = left[ 0 ]; left.erase( 0 , 1 ); }else if( !top.empty() ){ center = top[0]; top.erase( 0 , 1 ); } }else{ if( result.find( center , 0 ) != string::npos && !top.empty() ){ bottom.push_back( center ); center = top[ 0 ]; top.erase( 0 , 1 ); }else if( !left.empty() ){ right.push_back( center ); center = left[ 0 ]; left.erase( 0 , 1 ); } } } if( result.find( center , 0 ) != string::npos ){ bottom.push_back( center ); }else{ right.push_back( center ); } cout << right << endl; } }