#mqc2026cspt201. 抢占打印机 (printer)

抢占打印机 (printer)

抢占打印机 (printer)

题目背景

期末考试快到了,蒙自一中图书馆唯一的自助打印机前排起了长龙。由于大家都要复习,争分夺秒,为了保证公平,学校学生会制定了严格的“限流”打印规则。

题目描述

当前队伍里一共有 NN 名同学(从前到后编号为 1N1 \sim N)。第 ii 名同学手里有 U 盘,他一共需要打印 AiA_i 张复习资料。

打印机的规则如下:

1.每次只能队伍的第一名同学使用打印机。 2.每个人每次只能打印 1 张资料。打印 1 张资料需要消耗 1 秒钟。 3.如果这名同学打印完这 1 张后,他的资料还没有全部印完,他必须立刻抱着书包跑到队伍的最末尾重新排队。 4.如果他已经印完了自己需要的所有资料,他就可以直接离开图书馆回教室复习了。 (忽略同学们交换位置、走路走到队尾的时间,统统视为 0 秒)

小明排在队伍的第 KK 个位置(即初始编号为 KK)。他非常焦急,想知道自己彻底印完最后一张资料,可以离开图书馆的那一瞬间,一共过去了多少秒?

输入格式

第一行包含两个正整数 NNKK,分别表示队伍里的总人数,以及小明的初始位置。 第二行包含 NN 个正整数 A1,A2,,ANA_1, A_2, \dots, A_N,依次表示从队首到队尾每个人需要打印的总张数。数字之间用空格隔开。

输出格式

输出一个整数,表示小明印完自己最后一张资料所需的总秒数。

输入输出样例

样例输入 1

3 2
2 3 1

样例输出 1

6

样例 1 解释

第 1 秒:1号同学印 1 张(还剩 1),排到队尾。当前队伍:[2, 3, 1] 第 2 秒:2号同学(小明)印 1 张(还剩 2),排到队尾。当前队伍:[3, 1, 2] 第 3 秒:3号同学印 1 张(还剩 0),印完离开!当前队伍:[1, 2] 第 4 秒:1号同学印 1 张(还剩 0),印完离开!当前队伍:[2] 第 5 秒:2号同学(小明)印 1 张(还剩 1),排到队尾。当前队伍:[2] 第 6 秒:2号同学(小明)印 1 张(还剩 0),印完离开!一共耗时 6 秒。

样例输入 2

5 4
10000000 10000000 10000000 10000000 10000000

样例输出 2

49999999

(提示:请不要尝试用队列一步步去模拟样例 2,否则你的程序会运行到明天早上)

数据范围与约定

对于 30%30\% 的数据,N100N \le 100Ai1000\sum A_i \le 1000。(允许使用队列暴力模拟) 对于 60%60\% 的数据,N1000N \le 1000Ai105A_i \le 10^5。 对于 100%100\% 的数据,1KN1051 \le K \le N \le 10^51Ai1091 \le A_i \le 10^9

【特别提醒】:最终的答案可能会非常大,超过 32 位整数的范围。使用 C++ 的同学请务必使用 long long 类型!