AT_codequeen2024_final_g Quintuple Scoop Ice Cream
题目描述
高桥同学和朋友们来到 AtCoder Land 的一家冰淇淋店。
这家冰淇淋店有 $N$ 种口味的冰淇淋,每种口味的冰淇淋库存都充足。
在这家店里,你可以购买 $5$ 层叠加的冰淇淋。你可以自由选择这 $5$ 层的口味(可以重复),但相邻两层不能是同一种口味。也就是说,在这家店中,可以购买到 $N\times(N-1)^4$ 种不同的 $5$ 层叠加冰淇淋。
高桥同学有这家店的优惠券,只要对于所有 $i=1,2,\ldots,N$,第 $i$ 种口味的冰淇淋总共被点的数量不超过 $C_i$ 个,就可以用优惠券购买。由于冰淇淋的定价非常昂贵,高桥同学不能超过优惠券购买上限来购买。
高桥同学希望能为尽可能多的朋友购买 $5$ 层叠加的冰淇淋。请你计算最多能买多少份 $5$ 层叠加的冰淇淋,并构造一种购买方案。
更严格地说:
请找出最大的非负整数 $K$,以及一个 $K\times5$ 的序列 $(A_{i,j})_{1\leq i\leq K,1\leq j\leq 5}$,满足以下所有条件:
- $1\leq A_{i,j}\leq N$($1\leq i\leq K,1\leq j\leq 5$)。
- $A_{i,j}\neq A_{i,j+1}$($1\leq i\leq K,1\leq j\leq 4$)。
- 对于每个 $x=1,2,\dotsc,N$,使 $A_{i,j}=x$ 的 $(i,j)$ 对数不超过 $C_x$。
如果有多个满足条件的解,输出其中任意一个即可。
输入格式
输入从标准输入读入,格式如下:
> $N$ $C_1$ $C_2$ $\ldots$ $C_N$
输出格式
请输出最多能购买的 $5$ 层叠加冰淇淋的份数 $K$,以及每一份的口味选择。具体而言,输出 $K+1$ 行:
> $K$
> $A_{1,1}$ $A_{1,2}$ $A_{1,3}$ $A_{1,4}$ $A_{1,5}$
> $A_{2,1}$ $A_{2,2}$ $A_{2,3}$ $A_{2,4}$ $A_{2,5}$
> $\vdots$
> $A_{K,1}$ $A_{K,2}$ $A_{K,3}$ $A_{K,4}$ $A_{K,5}$
其中 $(A_{i,j})$ 必须满足上述所有条件。
如果有多种方案,输出任意一种即可。
说明/提示
### 样例解释 1
通过如下方法,可以最多购买 $3$ 份 $5$ 层叠加冰淇淋。
例如,以下输出也是正确答案:
```
3
1 3 4 5 1
3 4 5 1 3
5 3 5 2 5
```
相反,下面的输出不被认为是正确答案:
```
3
1 1 1 2 3
3 3 3 4 4
5 5 5 5 5
```
```
3
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
```
```
2
1 2 3 4 5
1 3 4 5 1
```
这些方案,要么有冰淇淋的相邻两层使用了相同口味,要么超过了第 $2$ 种和第 $4$ 种口味的购买上限,要么 $K$ 不是最大。
### 样例解释 2
高桥同学虽然有 $1003$ 个口味的优惠券,但 $5$ 层叠加冰淇淋只能买一份。
### 样例解释 3
也有可能无法买到一份 $5$ 层叠加冰淇淋。
# 数据范围
- $1\leq N\leq2\times10^5$
- $0\leq C_i\leq2\times10^5$
- $\displaystyle\sum_{i=1}^N C_i\leq2\times10^5$
- 所有输入均为整数。
由 ChatGPT 5 翻译