题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1093
题目大意:有很多乌龟套在一起,你每次可以把任意一个乌龟移到栈的顶端,然后给你一个目标序列,问你
至少需要移动哪些乌龟,并按移动顺序输出这些乌龟的名字。
思路分析:想明白了以后就会发现,这道题很水,只需要把两个序列从末尾n-1开始比较,如果发现相同乌龟,
则原序列和目标序列同时向上移1,否则原序列移1,目标序列不动。最后目标序列栈顶剩下的哪些乌龟就是原序列
需要移动的,逆序输出即可。
代码:
#include <iostream>
#include <algorithm>#include <stack>#include <queue>#include <cstdio>#include <cstring>using namespace std;const int maxn=1005;char a[maxn][100],b[maxn][100];int main(){ int T; cin>>T; while(T--) { int n; cin>>n; getchar(); for(int i=0;i<=n-1;i++) gets(a[i]); for(int i=0;i<=n-1;i++) gets(b[i]); int p=n-1,q=n-1; while(p>=0) { if(!strcmp(a[p],b[q])) q--; p--; } while(q>=0) { printf("%s\n",b[q]); q--; } cout<<endl; } return 0;}