当前位置:网站首页>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 .
边栏推荐
- 【7.3】146. LRU缓存机制
- Detailed explanation of four modes of distributed transaction (Seata)
- Statistical capital consonants
- 全文检索引擎Solr系列—–全文检索基本原理
- 愉悦资本新双币基金近40亿元完成首次关账
- 洛谷P5194 [USACO05DEC]Scales S 题解
- Luogu p4047 [jsoi2010] tribal division solution
- Frequently asked questions: PHP LDAP_ add(): Add: Undefined attribute type in
- Selective sorting
- Learn to punch in today
猜你喜欢
Exercise 6-6 use a function to output an integer in reverse order
常见问题之PHP——ldap_add(): Add: Undefined attribute type in
分布式事务(Seata) 四大模式详解
Programming language: the essence of type system
Niuke: crossing the river
Exercise 10-8 recursive implementation of sequential output of integers
【北大青鸟昌平校区】互联网行业中,哪些岗位越老越吃香?
必贝特医药冲刺科创板:年营收97万亏损1.37亿 拟募资20亿
Puzzle (016.4) domino effect
Detailed explanation of four modes of distributed transaction (Seata)
随机推荐
泰凌冲刺科创板:拟募资13亿 国家大基金与小米长江是股东
表单文本框的使用(一) 选择文本
7-22 tortoise and rabbit race (result oriented)
MongoDB索引
7-17 crawling worms (break exercise)
Recent learning summary
[clean up the extraordinary image of Disk C]
SSH access control, blocking the IP when logging in repeatedly to prevent brute force cracking
Eight sorts
洛谷P5018 [NOIP2018 普及组] 对称二叉树 题解
Detailed explanation of four modes of distributed transaction (Seata)
Tonybot humanoid robot infrared remote control play 0630
Luogu p4047 [jsoi2010] tribal division solution
Preliminary summary of structure
tonybot 人形機器人 紅外遙控玩法 0630
puzzle(016.3)千丝万缕
Convert string to decimal integer
Mongodb index
Showmebug entered Tencent conference, opening the era of professional technical interview
7-19 check denomination (solve binary linear equation)