[Codeforces] Codeforces Round #668 (Div. 2) A. Permutation Forgery

2020年12月13日

問題

方針

順列 \( p \) と異なる順列 \( p^{\prime} \) が \( F(p) = F(p^{\prime}) \) となるような \( p^{\prime} \) を見つけます。

\( F(p) \) は、

\[ {p_1 + p_2, p_2 + p_3, \cdots, p_{n-1} + p_{n}}\]

の \( n – 1 \) 個の要素を昇順に並び替えたものなので、\( p^{\prime}_i = p_{n- i +1}\) とすると、\( F(p^{\prime}) \) は、

\[ {p_n + p_{n-1}, p_{n-2} + p_{n-3}, \cdots, p_{2} + p_{1}}\]

を昇順に並び替えたものになるので、 \( F(p) = F(p^{\prime}) \) となります。

コード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main() {
    int t, n;
    cin >> t;
    for (int i = 0; i < t; i++) {
        cin >> n;
        int p[n];
        for (int j = 0; j < n; j++) {
            cin >> p[j];
        }
        for (int j = n - 1; j >= 0; j--) {
            if (j == 0) {
                cout << p[j] << "\n";
            } else {
                cout << p[j] << " ";
            }
        }
    }
    return 0;
}