当前位置:网站首页>7-9 one way in, two ways out (25 points)
7-9 one way in, two ways out (25 points)
2022-07-03 14:33:00 【Study hard 867】
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
Chinese translation :
Consider a special queue , It's a linear structure , Allow one end to insert , Both ends are deleted . Your job is to check whether a given insertion sequence can delete the sequence . for example , If we insert in order 1、2、3、4 and 5, You can get 1、3、2、5 and 4 As the output , But it is impossible to get 5、1、3、2 and 4.
Enter specifications :
Each input file contains a test case . For each case , The first line gives 2 A positive integer N and K(≤10) , Insert number and query number respectively . Then in the next line N A different number , As an insert sequence . And finally K That's ok , Each row contains N Insert the number as the deletion sequence to be checked .
All numbers in a row are separated by spaces .
Output specifications :
For each deletion sequence , If you can really get , Then print in the line “ yes ”, Otherwise print “ no ”.
Sample input :
First of all, let's understand the meaning of the question , For example 1234 Is the default sequence , Then he gave a 4123 This sequence , So it's according to 4123 Delete the data in the order ,4 There must be before 123,3 There must be before 12........, Then insert only one end , First, 4, Then we insert from one end 1234, Then delete both ends , First, 4, Delete from the right , And then there was 1, Delete from the left , And then there was 2, Delete from the left , And then there was 3 Delete from the right . At the same time, if a number is deleted , Then we don't need to consider this number in the later sequence , For example 2 Deleted , that 3 As long as there is 1 that will do .
From the above example, we first judge a number , What numbers did he have to appear first , Now we need to construct a sequential function , That is, before a certain number appears , Those numbers should appear , meanwhile , We also need an array to mark whether a number has been deleted , It is also necessary to determine whether the numbers at both ends are corresponding ( That is, the number we want to delete ), If not, then NO. According to this, we write the following code :
#include <stdio.h>
int main(){
int i,j;
int k,n,front,flag,m,t,rear;
scanf("%d%d",&n,&k);
int a[n],c[n],b[n],book[n],g,h,l;//c[n] Is to store the current undeleted number ,a[n] It's a sequential array ,b[n] Is the order in which we want to delete numbers .
for(i=0;i<n;i++){
scanf("%d",&a[i]);
book[i]=1;// All data has not been deleted
c[i]=-1;// Prevent random data from being duplicated with the data we want to delete
}
for(i=0;i<k;i++){
front=0;
flag=0;
l=0;
rear=-1;// Adding a data is from 0 The subscript begins , So we let rear yes -1
for(j=0;j<n;j++)book[j]=1;
for(j=0;j<n;j++){
h=0;
scanf("%d",&b[j]);// Enter the data to be added
for(g=0;g<n;g++)if(a[g]==b[j])break;// Find the data in a Position in array , It's convenient to save the data in front of him first
if(l<=g){for(m=0,l=0;l<=g;l++){// If the data to be stored is larger than the previous data , We need to update the array .
if(book[l]==0)continue;// If it has been deleted, it will not be executed
c[h++]=a[l];
front=0;// Because the array is going to 0 Inserted above , So we let the head become 0.
}
rear=h-1;
}
if(c[front]==b[j]){// See whether the header is the data to be deleted
book[g]=0;
front++;// Delete the head , Because there is no deletion in memory , So we need to logically let front++, To achieve logical deletion .
}
else if(c[rear]==b[j]){// See whether the tail is the data to be deleted
book[g]=0;
rear--;
}
else {j++;// Neither is it no
flag=1;
break;
}
}
for(t=j;t<n;t++)scanf("%d",&b[t]);// because break, As a result, some data is not scanf, So here is another loop to accept the data .
if(flag)printf("no\n");
else printf("yes\n");
}
}
The code I wrote just logically deleted the data , But the data is not deleted completely in the memory .
边栏推荐
猜你喜欢
Zhonggan micro sprint technology innovation board: annual revenue of 240million, net loss of 17.82 million, proposed to raise 600million
Luogu p5018 [noip2018 popularization group] symmetric binary tree problem solution
US stock listing of polar: how can the delivery of 55000 units support the valuation of more than 20billion US dollars
puzzle(016.3)千丝万缕
Why is this error reported when modifying records in the database
NFT新的契机,多媒体NFT聚合平台OKALEIDO即将上线
表单文本框的使用(一) 选择文本
Detailed explanation of four modes of distributed transaction (Seata)
GRPC的四种数据流以及案例
牛客网:过河卒
随机推荐
提高效率 Or 增加成本,开发人员应如何理解结对编程?
Thread.sleep和TimeUnit.SECONDS.sleep的区别
Get permissions dynamically
Although not necessarily the best, it must be the hardest!
7-2 and then what time (15 minutes)
6-9 statistics of single digits (15 points)
中国锂电池电解液行业市场专项调研报告(2022版)
洛谷P4047 [JSOI2010]部落划分 题解
LNMP环境mail函数不能发送邮件解决
Sub-GHz无线解决方案Z-Wave 800 系列ZG23 soc和ZGM230S模块
天谋科技 Timecho 完成近亿元人民币天使轮融资,打造工业物联网原生时序数据库
Luogu p5018 [noip2018 popularization group] symmetric binary tree problem solution
protobuf与grpc
Adc128s022 ADC Verilog design and Implementation
Statistical capital consonants
[clean up the extraordinary image of Disk C]
Zhonggan micro sprint technology innovation board: annual revenue of 240million, net loss of 17.82 million, proposed to raise 600million
MongoDB数据库入门的常用命令
Luogu p5194 [usaco05dec]scales s solution
Common commands for getting started with mongodb database