标签:
思路:紫书上原题,题意是给你一个进站前的数列,判断这几个数能否通过类似入栈出栈的操作后得到题目所给的数列;
用栈来模拟就好。
ps:一定要注意输出格式!!!写完代码之后,愣是一直wa,开始是因为栈没清空,后又发现是输出格式不对!!!
血的教训,改了好半天!!!
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cmath> 5 #include <cstring> 6 #include <queue> 7 #include <stack> 8 #include <map> 9 #include <vector> 10 #include <string> 11 12 #define PI acos((double)-1) 13 #define E exp(double(1)) 14 #define N 1000000 15 using namespace std; 16 17 int main (void) 18 { 19 int t,a,b,flag,c; 20 string s,e,code; 21 stack<int>sk; 22 while(scanf("%d",&t) == 1 && t) 23 { 24 cin>>s>>e; 25 flag=1; 26 a=b=c=0; 27 while(b<t) 28 { 29 if(s[a] == e[b]) 30 { 31 a++;b++; 32 code[c++]=1; 33 code[c++]=0; 34 } 35 else if(!sk.empty() && e[b] == sk.top()) 36 { 37 sk.pop();b++; 38 code[c++]=0; 39 } 40 else if(a < t) 41 { 42 sk.push(s[a++]); 43 code[c++]=1; 44 } 45 else 46 { 47 flag = 0; 48 break; 49 } 50 } 51 if(flag) 52 { 53 cout<<"Yes."<<endl; 54 for(int i = 0;i< 2*t;i++) 55 if(code[i]) 56 cout<<"in"<<endl; 57 else 58 cout<<"out"<<endl; 59 } 60 else 61 cout<<"No."<<endl; 62 cout<<"FINISH"<<endl; 63 while(!sk.empty()) 64 sk.pop(); 65 } 66 return 0; 67 }
标签:
原文地址:http://www.cnblogs.com/weeping/p/5352098.html