CF1054C Candies Distribution

题目描述

有 $n$ 个小朋友在幼儿园里,编号从 $1$ 到 $n$。幼儿园老师给第 $i$ 个小朋友发了 $a_i$ 颗糖果($1 \leq a_i \leq n$)。小朋友们从左到右依次坐成一排,编号从 $1$ 到 $n$。 每个小朋友在吃糖果的时候,会计算两个数字 $l_i$ 和 $r_i$,分别表示坐在他左边且糖果比他多的小朋友数量,以及坐在他右边且糖果比他多的小朋友数量。 形式化地,$l_i$ 表示满足 $1 \leq j < i$ 且 $a_i < a_j$ 的 $j$ 的个数,$r_i$ 表示满足 $i < j \leq n$ 且 $a_i < a_j$ 的 $j$ 的个数。 每个小朋友都把自己算出来的 $l_i$ 和 $r_i$ 告诉了老师。不幸的是,老师忘记了自己到底给每个小朋友发了多少糖果。现在她请求你的帮助:已知数组 $l$ 和 $r$,判断是否存在一种糖果分配方案,使得所有小朋友计算出来的 $l_i$ 和 $r_i$ 都是正确的。如果存在,请给出任意一种可行的分配方案。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 1000$),表示幼儿园小朋友的数量。 第二行包含 $n$ 个整数 $l_1, l_2, \ldots, l_n$($0 \leq l_i \leq n$),用空格隔开。 第三行包含 $n$ 个整数 $r_1, r_2, \ldots, r_n$($0 \leq r_i \leq n$),用空格隔开。

输出格式

如果不存在一种分配糖果的方案使得所有小朋友计算的数字都是正确的,输出一行 “NO”(不带引号)。 否则,第一行输出 “YES”(不带引号)。第二行输出 $n$ 个整数 $a_1, a_2, \ldots, a_n$,用空格隔开,表示每个小朋友实际获得的糖果数量。注意,某些小朋友获得的糖果数量可以相同,但所有数字都需满足 $1 \leq a_i \leq n$。第 $i$ 个小朋友左边糖果比他多的小朋友数量应等于 $l_i$,右边糖果比他多的小朋友数量应等于 $r_i$。如果有多种方案,输出任意一种即可。

说明/提示

在第一个样例中,如果老师分别给第 $1$、$2$、$3$、$4$、$5$ 个小朋友分配 $1$、$3$、$1$、$2$、$1$ 颗糖果,那么所有小朋友计算的值都是正确的。例如,第 $5$ 个小朋友分到 $1$ 颗糖果,他左边有 $2$ 个小朋友分到 $1$ 颗糖果,$1$ 个分到 $2$ 颗,$1$ 个分到 $3$ 颗,所以左边有 $2$ 个小朋友分到比他多的糖果。 在第二个样例中,不可能分配糖果,因为第 $4$ 个小朋友在计算 $r_4$ 时出错了,因为他右边没有小朋友,所以 $r_4$ 应该等于 $0$。 在最后一个样例中,所有小朋友都可以分到相同数量的糖果,因此所有数字都是 $0$。注意,每个小朋友至少要分到一颗糖果。 由 ChatGPT 4.1 翻译