[CODEFORCES 892D Gluttony](https://codeforces.com/contest/892/problem/D)
=
## 題目大意
給 $n$ 個**不重複**數 $a_1, a_2, \cdots, a_n$,構造一個 $a$ 數列的[排列](https://zh.wikipedia.org/wiki/%E7%BD%AE%E6%8F%9B) $b$,
使得對任意順序 $\forall k < n. x_1, x_2, \cdots, x_k$ 有 $\sum_{i=1}^k a_{x_i} \not= \sum_{i=1}^k b_{x_i}$
## 輸入
$n$
$a_1, a_2, \cdots, a_n$
## 輸出
$b_1, b_2, \cdots, b_n$
## 解法
令 $\begin{cases}
A = \sum_{i=1}^k a_{x_i} \\
B = \sum_{i=1}^k b_{x_i}
\end{cases}$ 以及 $\begin{cases}
C = \sum_{i=k+1}^n a_{x_i} \\
D = \sum_{i=k+1}^n b_{x_i}
\end{cases}$
$A = B$ 若且唯若 $C = D$,因為 $A+C = B+D$
為了使得 $A \not= B$,要設法保證 $C \not= D$
最直接的方式就是讓 $\forall i > k. b_{x_i} > a_{x_i}$
這樣一來,任意的 $D$ 都會大於 $C$ 了
> 也就是說有 $C \not= D$
做法是先將 $a$ 由小至大**排序**,接著讓 $b_i = a_{i+1}$
但這有個問題,從 $b_1$ 到 $b_{n-1}$ 設定完後,最終 $b_n$ 只能選擇 $a_1$
幸好,題目要求選擇 $x$ 的方式是**對稱**的
就是說若發生 $\exists i > k. b_{x_i} = b_n < a_{x_i}$ 則 $\forall i \le k. b_{x_i} > a_{x_i}$
那麼 $B$ 一定大於 $A$,這樣一來 $C \not= D$ 因為 $A+C = B+D$
```cpp
#include<bits/stdc++.h>
using namespace std;
int constexpr maxn = 25;
int n, a[maxn], c[maxn];
int main()
{
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i], c[i] = a[i];
sort(c, c+n);
for(int i = 0; i < n; i++) {
int p = lower_bound(c, c+n, a[i]) - c;
cout << c[(p+1)%n] << ' '; // b_i
}
cout << endl;
return 0;
}
```