#L4019. 「CEOI2023」Brought Down the Grading Server?

「CEOI2023」Brought Down the Grading Server?

题目描述

忙碌的首个比赛日已经过去……虽然科学委员会艰难地击退了对测评服务器的黑客攻击,但他们担心这影响了提交的评分。现在只有一个选择:所有提交都必须重测!

测评服务器有 NN 个处理器核心。委员会已经给每个核心安排了一个由 SS 份提交组成的列表,每份提交属于比赛中 TT 道题(编号为 1,,T1,\ldots,T)中的一道。委员会确定了 SS 是二的幂(由于一个 bug(Wolfgang 你有一个新需求),否则测评系统会崩溃,导致所有防火墙瘫痪,并可能暴露敏感信息!)。现在,在接下来 SS 分钟,每分钟每个核心会测评列表里恰好一个提交。

不幸的是,包含测评数据的数据库十分脆弱,如果同时请求单题数据的次数变化很大,数据库就会崩溃。因此,委员会希望对每个核心题目的提交进行排序,以便在重测时,每道题同时测评的最大和最小提交数最多相差一份。

写一个程序计算这样对于每个核心的提交排序方式。

输入格式

  • 第一行包含三个整数 N,S,TN,S,T,含义如题目描述。
  • 接下来 NN 行,每行描述分配给每个核心的提交。第 ii 行包含 SS 个整数 t1,,tSt_1,\ldots,t_S1tjT1\le t_j\le T),表示第 ii 个核心分配到了测评题目 t1,,tSt_1,\ldots,t_S 的提交。

输出格式

你的程序需要输出 NN 行,描述提交到每个核心的分配方案,从而使每道题同时测评的最大和最小提交数最多相差一份:第 ii 行应包含 SS 个整数 r1,,rSr_1,\ldots,r_S,表示第 ii 个核心在第 jj 分钟测评一份对题目 rjr_j 的提交。保证对于每个测试点,这样的分配方案均存在。

样例输入与输出

样例 1

输入

3 2 3
1 2
2 3
2 3

输出

2 1
3 2
2 3

解释
对于第一个样例的输出,对于题目 1122,连续测评的提交数最大值和最小值之差为 11,对于题目 33 这个值为 00。另一方面,按输入排列提交不是一个合法的输出,因为这时对于题目 33,连续测评的提交数最大值和最小值之差为 22

样例 2

输入

3 4 3
2 3 2 2
2 3 3 2
2 2 3 2

输出

2 2 2 3
3 2 3 2
2 3 2 2

解释
对于第二个样例的输出,对于所有三道题,连续测评的提交数最大值和最小值之差为 00

数据范围与提示

1. 通用数据范围

变量 取值范围
NN 1N1051\le N\le 10^5
SS 1S1051\le S\le 10^5,且存在正整数 kk 使得 S=2kS=2^k
TT 1T1051\le T\le 10^5
NSN \cdot S 5×105\le 5\times 10^5

2. 子任务附加限制与分值

子任务编号 附加限制 分值(说明)
1 S=2S=2N,T20N,T\le 20 1010(无分段)
2 S=2S=2 10+5+510+5+5
1010 分:TNT\le N 且每道题提交总数能被 SS 整除;55 分:附加解决 TNT\le N 所有测试点;55 分:附加解决所有测试点)
3 NS104N \cdot S\le 10^4 15+5+515+5+5
1515 分:TNT\le N 且每道题提交总数能被 SS 整除;55 分:附加解决 TNT\le N 所有测试点;55 分:附加解决所有测试点)
4 无附加限制 20+10+1020+10+10
2020 分:TNT\le N 且每道题提交总数能被 SS 整除;1010 分:附加解决 TNT\le N 所有测试点;1010 分:附加解决所有测试点)

3. 子任务显示说明

对于第 ii 个子任务的第 jj 个部分分,测评页面中显示为第 3(i2)+j+23 \cdot (i-2) + j + 2 个子任务。例如,第 33 个子任务的第 22 个部分分显示为第 3(32)+2+2=73 \cdot (3-2) + 2 + 2 = 7 个子任务。