CF134C Swaps
题目描述
有 $n$ 个玩家围坐在一张圆桌旁。他们总共有 $s$ 张 $n$ 种颜色的牌。最初,第 $i$ 个人只拥有第 $i$ 种颜色的牌。玩家可以按照以下规则交换手中的牌:
- 玩家在交换时,只能给出自己颜色的牌;
- 玩家不能接受自己已经拥有颜色的牌(特别地,无论自己是否已经把本色牌全部送出,都不能再收回本色牌);
- 每次交换时,两个人互相交换各自的一张牌(每人各给出一张,收回一张)。
所有 $n$ 个玩家的目标是:每个人都要把自己最初拥有的所有本色牌全部送出去(即所有本色牌都不在自己手中)。你的任务是判断是否存在一种交换顺序可以实现目标。如果可以,请输出所有的交换过程。
输入格式
第一行包含两个整数 $n$($1 \leq n \leq 200000$)和 $s$($1 \leq s \leq 200000$)。第二行包含 $n$ 个数,第 $i$ 个数表示第 $i$ 个玩家在游戏开始时拥有的牌数。可能有玩家一开始没有任何牌。
输出格式
如果不存在满足条件的交换顺序,第一行输出 "No"。否则,第一行输出 "Yes"。接下来输出一个整数 $k$,表示交换的次数。之后的 $k$ 行,每行输出一对玩家编号,表示这两位玩家进行了一次交换。交换的顺序和编号顺序可以任意。
说明/提示
由 ChatGPT 4.1 翻译