测试用例通过,但没有购买题库,不能测试全部用例
Consider a special queue which is a linear structure that allows insertions at one end, yet deletions at both ends. Your job is to check, for a given insertion sequence, if a deletion sequence is possible. For example, if we insert 1, 2, 3, 4, and 5 in order, then it is possible to obtain 1, 3, 2, 5, and 4 as an output, but impossible to obtain 5, 1, 3, 2, and 4.
Input Specification:
Each input file contains one test case. For each case, the first line gives 2 positive integers N and K (≤10), which are the number of insertions and the number of queries, respectively. Then N distinct numbers are given in the next line, as the insertion sequence. Finally K lines follow, each contains N inserted numbers as the deletion sequence to be checked.
All the numbers in a line are separated by spaces.
Output Specification:
For each deletion sequence, print in a line yes
if it is indeed possible to be obtained, or no
otherwise.
Sample Input:
5 4
10 2 3 4 5
10 3 2 5 4
5 10 3 2 4
2 3 10 4 5
3 5 10 4 2
Sample Output:
yes
no
yes
yes
#include<iostream>
using namespace std;
int main(){
int n,k;
cin>>n>>k;
int flag = 1;
int input[n];
int visit[n];
int output[n];
for(int i=0;i<n;i++){
cin>>input[i];
visit[i]=1;
}
for(int i=0;i<k;i++){
int front = 0,rear = -1;
for(int i=0;i<n;i++){
cin>>output[i];
visit[i]=1;
}
for(int j = 0;j<n;j++){
int index = 0;
while(input[index]!=output[j]){
index++;
}
if(index==front){
visit[front]=0;
front++;
}else{
if(rear < front){
visit[index]=0;
rear = index-1;
}else{
if(index>front&&index<rear){
flag = false;
break;
}else{
visit[index] = 0;
rear = index-1;
while(visit[rear]==0&&rear>=0){
rear--;
}
}
}
}
}
if(flag){
cout<<"yes";
}else{
cout<<"no";
flag = true;
}
}
}