hdu--1022--Train Problem I
1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 int main() { 5 int n; 6 while (cin>>n) { 7 string a, b; 8 cin>>a>>b; 9 string tag; 10 stack<int> s; 11 for (int i=0, j=0; i<a.size(); i++) { 12 /* 13 如果a[i] = b[j]说明是进去再出来,如果不相等,说明进去没出来 14 如果遇到相等的,那么判断栈空,不空则判断后面出站的是否是栈顶元素,如果是继续出栈 15 123 321 16 匹配到3,判断2=栈顶2,1=栈顶1,判断完毕,YES 17 */ 18 if (a[i] != b[j]) { 19 tag += "0"; 20 s.push(a[i]); 21 } else { 22 tag += "01"; 23 j++; 24 while (!s.empty()) { 25 if (s.top() == b[j]) { 26 tag += "1"; 27 s.pop(); 28 j++; 29 } else break; 30 } 31 } 32 } 33 if (s.empty()) { 34 cout<<"Yes."<<endl; 35 for (int i=0; i<tag.size(); i++) { 36 if (tag[i] == '1') { 37 cout<<"out\n"; 38 } else { 39 cout<<"in\n"; 40 } 41 } 42 cout<<"FINISH\n"; 43 } else { 44 cout<<"No.\nFINISH\n"; 45 } 46 } 47 return 0; 48 }