取行李 一般机场里,航班到达后,旅客们会去到达区的行李传送带那里取自己的行李。 现假设有一座特别的机场,每条传送带只有一个取行李的窗口。旅客们必须排好队,逐一到窗口取自己的行李。但是当某人到窗口前,发现行李不是自己的,那人就只好走到队尾去等下一次机会。此时那件行李会一直等在窗口,直到它的主人把它取走。假设每一次认领需要 1 分钟,本题就要求你计算传送带清空需要的时间、以及旅客们的平均等待时间。 例如,假设行李 i 属于旅客 i。行李的到达顺序是 1、2、3,旅客的到达顺序是 2、1、3。则 1 号行李要等 2 分钟才能被主人 1 号旅客取走。这时行李队列中有 2、3,旅客队列中是 3、2。于是 2 号行李还要等 2 分钟才能被 2 号旅客取走,最后 3 号在第 5 分钟取走行李。旅客们的平均等待时间是 (2+4+5)/3 ≈ 3.7。 时间限制:1000 内存限制:65536 输入 输入首先在第一行给出一个正整数 N(≤ 103)。下一行给出 N 个数字,是 [1, N] 区间内整数的一个重排列,表示旅客队列。这里我们假设行李队列是按 1、2、……、N 有序的,并且行李 i 属于旅客 i。一行中数字间以空格分隔。 输出 在一行中输出传送带清空需要的时间、以及旅客们的平均等待时间(输出小数点后 1 位)。数字间以 1 个空格分隔,行首尾不得有多余空格。 样例输入 5 3 5 1 2 4 样例输出 9 6.0
正确答案:参考程序(Python):n=int(input());q=list(map(int,input().split()));import collections;bq=collections.deque(range(1,n+1));pq=collections.deque(q);t=0;wait=[];while bq:if pq[0]==bq[0]:wait.append(t+1);t+=1;pq.popleft();bq.popleft() else:pq.append(pq.popleft());t+
试卷来源:202503 青少年等级考试C/C++真题六级