Input The input contains several test cases. Each test case consists of an integer, the number of trains, and two strings, the order of the trains come in:O1, and the order of the trains leave:O2. The input is terminated by the end of file. More details in the Sample Input.
Output The output contains a string "No." if you can't exchange O2 to O1, or you should output a line contains "Yes.", and then output your way in exchanging the order(you should output "in" for a train getting into the railway, and "out" for a train getting out of the railway). Print a line contains "FINISH" after each test case. More details in the Sample Output.
Sample Input 3 123 321 3 123 312
Sample Output Yes. in in in out out out FINISH No. FINISH 源代码 #include<iostream> #include<stack> #include<string> #include<vector> using namespace std; int trainproblem1(string in,string out,int n); vector<string> svec; void main() { string str1,str2; int number; int i,j; bool flag=0; //while(!cin.eof()) while(cin>>number) { //cin>>number>>str1>>str2; cin>>str1>>str2; int number1=number*2; flag=trainproblem1(str1,str2,number); if(flag==1) { cout<<"Yes."<<endl; for(vector<int>::size_type ix=0;ix<number1;ix++) cout<<svec[ix]<<endl; } else { cout<<"No."<<endl; } cout<<"FINISH"<<endl; flag=0; svec.clear(); fflush(stdin); } } int trainproblem1(string in,string out,int n) { stack<int> intStack; int i=0,k=0; while(i<n) { intStack.push(in[i++]); svec.push_back("in"); while(!intStack.empty() && intStack.top()==out[k]) { intStack.pop(); svec.push_back("out"); k++; } } if(intStack.empty()) return 1; else return 0; } 真是惭愧,栈学的太烂。参考同学的代码整了好久才搞出来。。 问题总结: 1:需要深刻理解栈的应用。 2:需要多次输入数据时,记得清空上次遗留数据。 3:格式错误需注意。 4:疑问?The input is terminated by the end of file.使用while(!cin.eof())不知道为何会WA? 网上解答:while(!cin.eof()) //直至按ctrl+z键退出! PS:The input is terminated by the end of file 统一使用 int x; while(cin>>x) { } return 0;