给定n个元素的输入顺序和输出顺序,需要你判定这是一个栈还是队列?
输入 有多组测试数据。
每组数据第一行有一个整数n,表示元素个数。
第二行有n个整数,表示输入顺序,第三行有n个整数,表示输出顺序。
后台数据保证2 <= n <= 10,给定的n个元素均不相同。
输出 若有可能是一个队列的操作,则输出0。
若是一个栈的操作,则输出1。
数据保证有解。
样例输入 2 1 2 2 1 3 2 1 3 2 3 1 3 1 2 3 1 2 3 样例输出 1 1 0
#include<cstdio>#include<cstring>#include<cmath>#include<stack>#include<queue>#include<algorithm>using namespace std;#define INF 0x3f3f3f3f#define ll long longint main(){ int n; while (~scanf("%d",&n)){ queue<int> s; int a[20]; int b[20]; for (int i= 0; i < n; ++i){ scanf("%d",&a[i]); } for (int i= 0; i < n; ++i){ scanf("%d",&b[i]); } int k = 0; for (int i= 0; i < n; ++i){ if (a[i] == b[i]){ k++; while (!s.empty()){ if (s.front() == b[k]){ s.pop(); k++; } else break; } } else s.push(a[i]); } if (s.empty()) PRintf("0/n"); else printf("1/n"); } return 0;}队列 先入先出 判断每个数组元素是否相等即可 这是一道水题 完全没必要在竞赛的情况下小题大做 一定要好好理解这些算法
新闻热点
疑难解答