#2033. 【基础】任务调度

【基础】任务调度

题目描述

乌龟因为动作太慢,有 nn 个任务已经超过截止日期了。乌龟处理第 ii 个任务需要 aia_i 单位时间。从 00 时刻开始,乌龟可以选择某项任务,完成它,然后再开始另一项任务,如此往复直到所有任务都被完成。

由于已经超过截止日期,乌龟会为此受到一定的惩罚,惩罚值等于所有任务完成时刻之和。例如,有 22 个任务分别需要 10102020 单位时间完成。如果先完成任务 11 再完成任务 22,完成时刻分别为 101010+20=3010+20=30,惩罚值为 10+30=4010+30=40;如果先完成任务 22 再完成任务 11,完成时刻分别为 202020+10=3020+10=30,惩罚值为 20+30=5020+30=50

乌龟希望你求出一种完成任务的顺序,使得总惩罚值最小,并输出这个最小的总惩罚值。(你只需输出最小惩罚值,不需要输出具体的顺序。)

任务的处理时间 aia_i 由一个线性同余生成器生成,具体方式见输入格式。

输入格式

一行两个整数 n,R1n, R_1,分别表示任务的数量和生成数列的首项。

生成数列 RR 的定义如下:

  • 整数 R1R_1 在输入中给出,保证 0R1<201700 \le R_1 < 20170
  • 对于 i>1i > 1Ri=(Ri1×6807+2831)mod20170R_i = (R_{i-1} \times 6807 + 2831) \bmod 20170

ii 个任务的处理时间为:

ai=(Rimod100)+1a_i = (R_i \bmod 100) + 1

数据保证 1n1000001 \le n \le 100000

输出格式

一行一个整数,表示完成所有任务的最小惩罚值。

样例

10 2
1771

数据范围

  • 1n1000001 \le n \le 100000
  • 0R1<201700 \le R_1 < 20170
  • 1ai1001 \le a_i \le 100(因为 aia_iRimod100R_i \bmod 10011 得到)

来源

2017 江苏省青少年信息学奥林匹克竞赛复赛