给定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 long
int 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;
}
队列 先入先出 判断每个数组元素是否相等即可 这是一道水题
完全没必要在竞赛的情况下小题大做 一定要好好理解这些算法