首页 > 学院 > 开发设计 > 正文

Stack ? Queue ? [水题]

2019-11-06 06:23:29
字体:
来源:转载
供稿:网友

给定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;}

队列 先入先出 判断每个数组元素是否相等即可 这是一道水题 完全没必要在竞赛的情况下小题大做 一定要好好理解这些算法


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表