CF1028E Restore Array

题目描述

在讨论 Codeforces Round 的合适 A 题时,Kostya 创建了一个循环正整数数组 $a_1, a_2, \ldots, a_n$。由于讨论时间很长且没有进展,Kostya 又创建了一个新的循环数组 $b_1, b_2, \ldots, b_n$,其中 $b_i = (a_i \bmod a_{i+1})$,这里 $a_{n+1} = a_1$。其中 $mod$ 表示[取模运算](https://en.wikipedia.org/wiki/Modulo_operation)。当讨论变得有趣时,Kostya 完全忘记了数组 $a$ 的样子。突然,他想到从数组 $b$ 恢复数组 $a$ 可能是一个有趣的问题(可惜不是 A 题)。

输入格式

第一行包含一个整数 $n$($2 \le n \le 140582$),表示数组 $a$ 的长度。 第二行包含 $n$ 个整数 $b_1, b_2, \ldots, b_n$($0 \le b_i \le 187126$)。

输出格式

如果存在某个长度为 $n$ 的数组 $a$,使得对所有 $i=1,2,\ldots,n$ 都有 $b_i = a_i \bmod a_{(i \bmod n) + 1}$,请在第一行输出「YES」,第二行输出 $a_1, a_2, \ldots, a_n$。所有 $a_i$ 应满足 $1 \le a_i \le 10^{18}$。可以证明,如果存在解,则一定存在满足该限制的解。 如果无法还原出任何合法的 $a$,请输出一行「NO」。 你可以以任意大小写输出每个字母。

说明/提示

在第一个样例中: - $1 \bmod 3 = 1$ - $3 \bmod 5 = 3$ - $5 \bmod 2 = 1$ - $2 \bmod 1 = 0$ 由 ChatGPT 4.1 翻译