hdu 1022 Train Problem I (栈的操作,还水了半天)
题意:
输入的两列字符串,第一列表示进入的顺序,第二列表示出去的顺序,问是否符合后进先出。
#include<stdio.h> #include<iostream> #include<string.h> #include<stack> using namespace std; int main() { int n,i,j,k; char a[5000],b[5000]; while(scanf("%d",&n)!=EOF) { stack<char>s; scanf("%s",a); scanf("%s",b); for(i=0,j=0,k=0;i<n&&j<n;) if(a[i]!=b[j]) { //goto RE; s.push(a[i]);//入栈完毕 i++; } else { while(!s.empty()) { j++; if(s.top()==b[j]) s.pop();//出栈 else {j--;break;} } i++,j++; } if(!s.empty())printf("No.\n"),printf("FINISH\n"); else { printf("Yes.\n"); for(i=0,j=0,k=0;i<n&&j<n;) if(a[i]!=b[j]) { s.push(a[i]);//入栈完毕 printf("in\n"); i++; } else { printf("in\nout\n"); while(!s.empty()) { j++; if(s.top()==b[j])//出栈 {printf("out\n");s.pop();} else{j--; break;} } i++,j++; } printf("FINISH\n"); } } return 0; }
提示:
提水,人更水;
过了测试数据,加测试数据7 1234567 4321576,3 312 123;然后才过;
找逻辑错不容易啊!