0
已解决
张帆
中级天翼
中级天翼
这道栈题要把我……
题目描述 Description
每辆公交车都从方向 a 驶入车站 m,且都从方向 b 驶出车站 m。假设从方向 a 驶来的公交车有 n 辆,分别编号为1,2 … n,每个时刻都是当前最晚驶入车站 m 的车在最前面,可以在任意的时刻将停在最前面的车厢驶出车站m。
假定车站 m 可以停放任意多辆的公交车,对于每一辆车,一旦进入车站 m 就不能再回到方向为 a 的道路上了;并且一旦进入方向 b 的道路上的车就不能再回到车站 m 了。
现在给定一个序列 t1 t2 … tn , 请你帮助车站的车辆调度工作人员判断是否可以让公交车按照该给定序列的顺序从方向 b 的道路驶出。
输入描述 Input Description
第一行:整数 q ( 1 <= q <= 10 ),表示接下来有 q 组测试数据
接下来的 q 组测试数据
每组的第一行:整数 n ,表示有 n 辆公交车
每组的第二行:n 个整数 t1 t2 … tn,为给出的序列
输出描述 Output Description
输出 q 行:对于每组测试数据,若可以则输出“Possible”,否则输出“Impossible”
样例输入 Sample Input
1
5
3 5 4 2 1
样例输出 Sample Output
Possible
数据范围及提示 Data Size & Hint
n <= 1000
WA50:
#include<iostream>
#include<cstring>
using namespace std;
int q,n,pos,t[1010];
int pop,task[1010];
int main(){
cin>>q;
while(q--){
cin>>n;
memset(t,0,sizeof(t));
memset(task,0,sizeof(task));
pop=pos=1;
task[pop]=-1;
for(int i=1;i<=n;i++) cin>>t[i];
for(int i=1;i<=n;i++){
pop++;
task[pop]=i;
while(task[pop]==t[pos]){
pos++;
pop--;
}
}
if(pos>n) cout<<"Possible\n";
else cout<<"Impossible\n";
}
return 0;
}
张帆在2021-02-23 17:37:47追加了内容
没人就结贴开始,半个小时谁赞最多采纳谁