CF920D Tanks
题目描述
Petya 有时候需要给他的农田浇水。为了浇水,Petya 需要一个恰好含有 $V$ 毫升水的水罐。
Petya 拥有 $N$ 个水罐,第 $i$ 个罐子最初含有 $a_i$ 毫升水。每个水罐的容量很大,可以容纳任意多的水(无论多大都行)。
此外,Petya 有一个容量为 $K$ 毫升的舀子(最初为空)。这个舀子可以用来从某个水罐取出一些水,然后把这些水全部倒入另一个水罐(不能在舀子里混合多个罐子的水,也不能倒水时留下一部分在舀子里)。当 Petya 尝试从某个罐子取水时,他能取出 $min(v, K)$ 毫升水,其中 $v$ 是该罐当前的水量。
是否有可能通过这些操作,得到一个恰好含有 $V$ 毫升水的水罐?如果可以,请输出一种操作序列,使得能够实现目标。如果存在多种方案,输出任意一种即可。
输入格式
第一行包含三个整数:$N$ $(2 \leq N \leq 5000)$,$K$ $(1 \leq K \leq 5000)$,$V$ $(0 \leq V \leq 10^9)$,分别表示水罐的数量、舀子的最大容量和需要得到的水量。
第二行包含 $N$ 个整数 $a_i$ $(0 \leq a_i \leq 10^5)$,其中 $a_i$ 表示第 $i$ 个水罐最初的水量。
输出格式
如果无法得到恰好 $V$ 毫升水的水罐,则输出 NO。
否则,第一行输出 YES。从第二行开始,每行输出一个操作,操作的格式为:“$cnt$ $x$ $y$”,其中 $x$ 表示取水的水罐编号,$y$ 表示倒水的水罐编号,$cnt$ 表示从 $x$ 罐取水倒入 $y$ 罐的操作次数($1 \leq cnt \leq 10^9, 1 \leq x,y \leq N$)。
这些操作的行数不得超过 $N+5$。
说明/提示
由 ChatGPT 5 翻译