P13422 [COCI 2019/2020 #4] Pod starim krovovima
题目描述
背景:传奇的萨格勒布小酒馆 Kod Žnidaršića。
时间:1936 年。
剧情简介:Franjo 和朋友们正在酒吧里一边喝酒一边讨论阿比西尼亚的时事。他的儿子,小 Perica,坐在酒吧角落的一张小桌子旁。在 Perica 面前,有 $N$ 个玻璃杯,编号为 $1$ 到 $N$。每个玻璃杯的容量(单位为纳升)已知,杯中当前的液体量也已知。
问题:小 Perica 想知道,通过在玻璃杯之间相互倒液体,最多能让多少个玻璃杯变空。他可以任意多次将任意整数纳升的液体从一个杯子倒到另一个杯子,只要没有液体溢出即可。
你的任务是输出最多能变空的玻璃杯数量,以及一种可能的所有玻璃杯中液体的分布方案。如果有多种分布方案能达到相同数量的空杯,输出任意一种即可。注意,不要求最小化倒液体的次数。
输入格式
第一行包含一个整数 $N$($1 \leq N \leq 1\,000$),表示玻璃杯的数量。
接下来的 $N$ 行,每行包含两个整数 $T_i$($0 \leq T_i \leq 10^9$)和 $Z_i$($1 \leq Z_i \leq 10^9$),分别表示第 $i$ 个玻璃杯当前的液体量和容量(单位均为纳升)。保证 $T_i \leq Z_i$。
输出格式
第一行输出最多能变空的玻璃杯数量。
第二行输出 $N$ 个整数,表示操作后每个玻璃杯中的液体量(顺序与输入一致)。如果有多种方案,输出任意一种即可。
说明/提示
对第二个样例的说明:一种可能的倒液体方案如下:
1. 把第 1 个杯子的液体全部倒入第 2 个杯子。
2. 把第 2 个杯子的液体全部倒入第 4 个杯子。
3. 把第 3 个杯子的 4 纳升液体倒入第 4 个杯子,把第 3 个杯子的 1 纳升倒入第 5 个杯子。
此时,第 1、2、3 号杯子都为空。
翻译由 ChatGPT-4.1 完成。