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 |
|
|
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 |