Submission #9474639


Source Code Expand

#include <iostream>
#include <algorithm>
#include <vector>
#include <set>

int main() {
    int n;
    std::cin >> n;

    std::vector<int> xs(n), cnt(n, 0);
    for (auto& x : xs) {
        std::cin >> x;
        ++cnt[--x];
    }

    std::set<int> ss;
    for (int x = 0; x < n; ++x) ss.insert(x);
  	// まだ決まっていない数の集合

    std::vector<int> ans;
    ans.reserve(n);

    int out = -1;  // 直前の数に指されている数
    while (ss.size() > 3) {
        int x = *ss.begin();
        if (x == out) {
          	// 指されていたら次へ
            if (ss.size() == 1) {
                std::cout << -1 << std::endl;
                return 0;
            } else {
                x = *(++ss.begin());
            }
        }

        int k = ss.size();
        int y = xs[x];
        if (ss.count(y) && cnt[y] == k - 1) x = y;
      	// y以外がyを指している場合

        ss.erase(x);
        ans.push_back(x);
        --cnt[xs[x]];
        out = xs[x];
    }

  	// 最後の全探索
    std::vector<int> rem(ss.begin(), ss.end());
    do {
        auto tmpans = ans;
        for (auto x : rem) ans.push_back(x);

        bool ok = true;
        for (int i = 0; i < n - 1; ++i) {
            if (ans[i + 1] == xs[ans[i]]) ok = false;
        }

        if (ok) {
            for (auto x : ans) std::cout << x + 1 << " ";
            std::cout << std::endl;
            return 0;
        }

        ans = tmpans;
    } while (std::next_permutation(rem.begin(), rem.end()));

    std::cout << -1 << std::endl;
    return 0;
}

Submission Info

Submission Time
Task D - Arrangement
User Tiramister
Language C++14 (GCC 5.4.1)
Score 800
Code Size 1645 Byte
Status AC
Exec Time 93 ms
Memory 6656 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 3
AC × 50
Set Name Test Cases
Sample sample_01, sample_02, sample_03
All hand2_01, hand2_02, hand2_03, hand2_04, hand_01, hand_02, hand_03, hand_04, handmaid_01, max_01, max_02, max_03, max_04, max_05, random_01, random_02, random_03, random_04, random_05, random_06, random_07, random_08, random_09, random_10, random_11, random_12, random_13, random_14, random_15, sample_01, sample_02, sample_03, small_01, small_02, small_03, small_04, small_05, special2_01, special2_02, special2_03, special2_04, special2_05, special2_06, special2_07, special2_08, special2_09, special2_10, special_01, special_02, special_03
Case Name Status Exec Time Memory
hand2_01 AC 1 ms 256 KiB
hand2_02 AC 1 ms 256 KiB
hand2_03 AC 91 ms 6656 KiB
hand2_04 AC 93 ms 6656 KiB
hand_01 AC 1 ms 256 KiB
hand_02 AC 1 ms 256 KiB
hand_03 AC 86 ms 6656 KiB
hand_04 AC 84 ms 6656 KiB
handmaid_01 AC 1 ms 256 KiB
max_01 AC 69 ms 6656 KiB
max_02 AC 70 ms 6656 KiB
max_03 AC 68 ms 6656 KiB
max_04 AC 68 ms 6656 KiB
max_05 AC 70 ms 6656 KiB
random_01 AC 1 ms 256 KiB
random_02 AC 1 ms 256 KiB
random_03 AC 1 ms 256 KiB
random_04 AC 1 ms 256 KiB
random_05 AC 1 ms 256 KiB
random_06 AC 1 ms 256 KiB
random_07 AC 1 ms 256 KiB
random_08 AC 1 ms 256 KiB
random_09 AC 1 ms 256 KiB
random_10 AC 1 ms 256 KiB
random_11 AC 1 ms 256 KiB
random_12 AC 1 ms 256 KiB
random_13 AC 1 ms 256 KiB
random_14 AC 1 ms 256 KiB
random_15 AC 1 ms 256 KiB
sample_01 AC 1 ms 256 KiB
sample_02 AC 1 ms 256 KiB
sample_03 AC 1 ms 256 KiB
small_01 AC 1 ms 256 KiB
small_02 AC 1 ms 256 KiB
small_03 AC 1 ms 256 KiB
small_04 AC 1 ms 256 KiB
small_05 AC 1 ms 256 KiB
special2_01 AC 75 ms 6656 KiB
special2_02 AC 75 ms 6656 KiB
special2_03 AC 75 ms 6656 KiB
special2_04 AC 75 ms 6656 KiB
special2_05 AC 87 ms 6656 KiB
special2_06 AC 81 ms 6656 KiB
special2_07 AC 81 ms 6656 KiB
special2_08 AC 78 ms 6656 KiB
special2_09 AC 81 ms 6656 KiB
special2_10 AC 82 ms 6656 KiB
special_01 AC 1 ms 256 KiB
special_02 AC 4 ms 512 KiB
special_03 AC 69 ms 6656 KiB