結果
問題 | No.2732 Similar Permutations |
ユーザー | rogi52 |
提出日時 | 2024-04-19 23:11:35 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 72 ms / 2,000 ms |
コード長 | 12,666 bytes |
コンパイル時間 | 3,283 ms |
コンパイル使用メモリ | 261,592 KB |
実行使用メモリ | 7,988 KB |
最終ジャッジ日時 | 2024-10-11 17:30:03 |
合計ジャッジ時間 | 18,434 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 21 ms
5,248 KB |
testcase_03 | AC | 39 ms
5,760 KB |
testcase_04 | AC | 13 ms
5,248 KB |
testcase_05 | AC | 10 ms
5,248 KB |
testcase_06 | AC | 5 ms
5,248 KB |
testcase_07 | AC | 29 ms
5,248 KB |
testcase_08 | AC | 15 ms
5,248 KB |
testcase_09 | AC | 8 ms
5,248 KB |
testcase_10 | AC | 68 ms
7,808 KB |
testcase_11 | AC | 7 ms
5,248 KB |
testcase_12 | AC | 69 ms
7,988 KB |
testcase_13 | AC | 68 ms
7,980 KB |
testcase_14 | AC | 69 ms
7,980 KB |
testcase_15 | AC | 70 ms
7,984 KB |
testcase_16 | AC | 49 ms
6,528 KB |
testcase_17 | AC | 48 ms
6,568 KB |
testcase_18 | AC | 63 ms
7,552 KB |
testcase_19 | AC | 70 ms
7,980 KB |
testcase_20 | AC | 68 ms
7,936 KB |
testcase_21 | AC | 69 ms
7,860 KB |
testcase_22 | AC | 40 ms
5,788 KB |
testcase_23 | AC | 70 ms
7,984 KB |
testcase_24 | AC | 41 ms
6,016 KB |
testcase_25 | AC | 70 ms
7,988 KB |
testcase_26 | AC | 58 ms
7,180 KB |
testcase_27 | AC | 70 ms
7,984 KB |
testcase_28 | AC | 56 ms
6,912 KB |
testcase_29 | AC | 69 ms
7,984 KB |
testcase_30 | AC | 50 ms
6,596 KB |
testcase_31 | AC | 72 ms
7,856 KB |
testcase_32 | AC | 66 ms
7,432 KB |
testcase_33 | AC | 71 ms
7,984 KB |
testcase_34 | AC | 47 ms
6,368 KB |
testcase_35 | AC | 71 ms
7,856 KB |
testcase_36 | AC | 66 ms
7,564 KB |
testcase_37 | AC | 71 ms
7,988 KB |
testcase_38 | AC | 61 ms
7,336 KB |
testcase_39 | AC | 71 ms
7,988 KB |
testcase_40 | AC | 58 ms
7,196 KB |
testcase_41 | AC | 70 ms
7,988 KB |
testcase_42 | AC | 53 ms
6,656 KB |
testcase_43 | AC | 71 ms
7,984 KB |
testcase_44 | AC | 37 ms
5,848 KB |
testcase_45 | AC | 70 ms
7,856 KB |
testcase_46 | AC | 63 ms
7,344 KB |
testcase_47 | AC | 68 ms
7,984 KB |
testcase_48 | AC | 42 ms
6,144 KB |
testcase_49 | AC | 65 ms
7,980 KB |
testcase_50 | AC | 40 ms
6,044 KB |
testcase_51 | AC | 61 ms
7,980 KB |
testcase_52 | AC | 51 ms
7,296 KB |
testcase_53 | AC | 69 ms
7,980 KB |
testcase_54 | AC | 69 ms
7,984 KB |
testcase_55 | AC | 69 ms
7,856 KB |
testcase_56 | AC | 68 ms
7,860 KB |
testcase_57 | AC | 34 ms
5,724 KB |
testcase_58 | AC | 47 ms
6,420 KB |
testcase_59 | AC | 46 ms
6,408 KB |
testcase_60 | AC | 38 ms
5,760 KB |
testcase_61 | AC | 35 ms
5,532 KB |
testcase_62 | AC | 58 ms
7,176 KB |
testcase_63 | AC | 2 ms
5,248 KB |
testcase_64 | AC | 2 ms
5,248 KB |
testcase_65 | AC | 2 ms
5,248 KB |
testcase_66 | AC | 2 ms
5,248 KB |
testcase_67 | AC | 2 ms
5,248 KB |
testcase_68 | AC | 2 ms
5,248 KB |
testcase_69 | AC | 2 ms
5,248 KB |
testcase_70 | AC | 2 ms
5,248 KB |
testcase_71 | AC | 2 ms
5,248 KB |
testcase_72 | AC | 2 ms
5,248 KB |
testcase_73 | AC | 2 ms
5,248 KB |
testcase_74 | AC | 2 ms
5,248 KB |
testcase_75 | AC | 2 ms
5,248 KB |
testcase_76 | AC | 2 ms
5,248 KB |
testcase_77 | AC | 1 ms
5,248 KB |
testcase_78 | AC | 2 ms
5,248 KB |
testcase_79 | AC | 2 ms
5,248 KB |
testcase_80 | AC | 2 ms
5,248 KB |
testcase_81 | AC | 2 ms
5,248 KB |
testcase_82 | AC | 2 ms
5,248 KB |
testcase_83 | AC | 2 ms
5,248 KB |
testcase_84 | AC | 2 ms
5,248 KB |
testcase_85 | AC | 2 ms
5,248 KB |
testcase_86 | AC | 2 ms
5,248 KB |
testcase_87 | AC | 2 ms
5,248 KB |
testcase_88 | AC | 2 ms
5,248 KB |
testcase_89 | AC | 1 ms
5,248 KB |
testcase_90 | AC | 2 ms
5,248 KB |
testcase_91 | AC | 2 ms
5,248 KB |
testcase_92 | AC | 2 ms
5,248 KB |
testcase_93 | AC | 2 ms
5,248 KB |
testcase_94 | AC | 2 ms
5,248 KB |
testcase_95 | AC | 2 ms
5,248 KB |
testcase_96 | AC | 2 ms
5,248 KB |
testcase_97 | AC | 2 ms
5,248 KB |
testcase_98 | AC | 2 ms
5,248 KB |
testcase_99 | AC | 2 ms
5,248 KB |
testcase_100 | AC | 2 ms
5,248 KB |
testcase_101 | AC | 2 ms
5,248 KB |
testcase_102 | AC | 1 ms
5,248 KB |
ソースコード
#line 2 "cp-library/src/cp-template.hpp" #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using uint = unsigned int; using ull = unsigned long long; using i32 = int; using u32 = unsigned int; using i64 = long long; using u64 = unsigned long long; using i128 = __int128_t; template < class T > bool chmin(T& a, T b) { if(a > b) { a = b; return true; } return false; } template < class T > bool chmax(T& a, T b) { if(a < b) { a = b; return true; } return false; } template < class T, class U > T ceil (T x, U y) { return (x > 0 ? (x + y - 1) / y : x / y); } template < class T, class U > T floor(T x, U y) { return (x > 0 ? x / y : (x - y + 1) / y); } int popcnt(i32 x) { return __builtin_popcount(x); } int popcnt(u32 x) { return __builtin_popcount(x); } int popcnt(i64 x) { return __builtin_popcountll(x); } int popcnt(u64 x) { return __builtin_popcountll(x); } #line 2 "cp-library/src/utility/rep_itr.hpp" template < class T > struct itr_rep { T i, d; constexpr itr_rep(const T i) noexcept : i(i), d(1) {} constexpr itr_rep(const T i, const T d) noexcept : i(i), d(d) {} void operator++() noexcept { i += d; } constexpr int operator*() const noexcept { return i; } constexpr bool operator!=(const itr_rep x) const noexcept { return d > 0 ? i < x.i : i > x.i; } }; template < class T > struct rep { const itr_rep< T > s, t; constexpr rep(const T t) noexcept : s(0), t(t) {} constexpr rep(const T s, const T t) noexcept : s(s), t(t) {} constexpr rep(const T s, const T t, const T d) noexcept : s(s, d), t(t, d) {} constexpr auto begin() const noexcept { return s; } constexpr auto end () const noexcept { return t; } }; template < class T > struct revrep { const itr_rep < T > s, t; constexpr revrep(const T t) noexcept : s(t - 1, -1), t(-1, -1) {} constexpr revrep(const T s, const T t) noexcept : s(t - 1, -1), t(s - 1, -1) {} constexpr revrep(const T s, const T t, const T d) noexcept : s(t - 1, -d), t(s - 1, -d) {} constexpr auto begin() const noexcept { return s; } constexpr auto end () const noexcept { return t; } }; #line 3 "cp-library/src/utility/io.hpp" /* 128bit integer */ istream& operator>>(istream& is, i128& x) { std::string s; is >> s; int pm = (s[0] == '-'); x = 0; for(int i : rep(pm, int(s.size()))) x = x * 10 + (s[i] - '0'); if(pm) x *= -1; return is; } ostream& operator<<(ostream& os, const i128& x) { if(x == 0) return os << '0'; i128 y = x; if(y < 0) { os << '-'; y *= -1; } std::vector<int> ny; while(y > 0) { ny.push_back(y % 10); y /= 10; } for(int i : revrep(ny.size())) os << ny[i]; return os; } template < class S, class T > istream& operator>>(istream& is, std::pair< S, T >& x) { is >> x.first >> x.second; return is; } template < class S, class T > ostream& operator<<(ostream& os, const std::pair< S, T >& x) { os << x.first << " " << x.second; return os; } namespace scanner { struct sca { template < class T > operator T() { T s; std::cin >> s; return s; } }; struct vec { int n; vec(int n) : n(n) {} template < class T > operator std::vector< T >() { std::vector< T > v(n); for(T& x : v) std::cin >> x; return v; } }; struct mat { int h, w; mat(int h, int w) : h(h), w(w) {} template < class T > operator std::vector< std::vector< T > >() { std::vector m(h, std::vector< T >(w)); for(std::vector< T >& v : m) for(T& x : v) std::cin >> x; return m; } }; struct speedup { speedup() { std::cin.tie(0); std::ios::sync_with_stdio(0); } } speedup_instance; } scanner::sca in() { return scanner::sca(); } scanner::vec in(int n) { return scanner::vec(n); } scanner::mat in(int h, int w) { return scanner::mat(h, w); } namespace printer { void precision(int d) { std::cout << std::fixed << std::setprecision(d); } void flush() { std::cout.flush(); } } template < class T > ostream& operator<<(ostream& os, const std::vector< T > a) { int n = a.size(); for(int i : rep(n)) { os << a[i]; if(i != n - 1) os << ' '; } return os; } int print() { std::cout << '\n'; return 0; } template < class head, class... tail > int print(head&& h, tail&&... t) { std::cout << h; if(sizeof...(tail)) std::cout << ' '; return print(std::forward<tail>(t)...); } template < class T > int print_n(const std::vector< T > a) { int n = a.size(); for(int i : rep(n)) std::cout << a[i] << "\n"; return 0; } #line 2 "cp-library/src/utility/key_val.hpp" template < class K, class V > struct key_val { K key; V val; key_val() {} key_val(K key, V val) : key(key), val(val) {} template < std::size_t Index > std::tuple_element_t< Index, key_val >& get() { if constexpr (Index == 0) return key; if constexpr (Index == 1) return val; } }; namespace std { template < class K, class V > struct tuple_size < key_val< K, V > > : integral_constant< size_t, 2 > {}; template < class K, class V > struct tuple_element < 0, key_val< K, V > > { using type = K; }; template < class K, class V > struct tuple_element < 1, key_val< K, V > > { using type = V; }; } #line 2 "cp-library/src/utility/vec_op.hpp" template < class T > key_val< int, T > max_of(const vector< T >& a) { int i = std::max_element(a.begin(), a.end()) - a.begin(); return {i, a[i]}; } template < class T > key_val< int, T > min_of(const vector< T >& a) { int i = std::min_element(a.begin(), a.end()) - a.begin(); return {i, a[i]}; } template < class S, class T > S sum_of(const vector< T >& a) { S sum = 0; for(const T x : a) sum += x; return sum; } template < class S, class T > vector< S > freq_of(const vector< T >& a, T L, T R) { vector< S > res(R - L, S(0)); for(const T x : a) res[x - L] += 1; return res; } template < class S, class T > struct prefix_sum { vector< S > s; prefix_sum(const vector< T >& a) : s(a) { s.insert(s.begin(), S(0)); for(int i : rep(a.size())) s[i + 1] += s[i]; } // [L, R) S sum(int L, int R) { return s[R] - s[L]; } }; #line 3 "cp-library/src/utility/heap.hpp" template < class T > using heap_min = std::priority_queue< T, std::vector< T >, std::greater< T > >; template < class T > using heap_max = std::priority_queue< T, std::vector< T >, std::less< T > >; #line 27 "cp-library/src/cp-template.hpp" #line 1 "cp-library/src/algorithm/bin_search.hpp" template < class T, class F > T bin_search(T ok, T ng, F f) { while(abs(ng - ok) > 1) { T mid = (ok + ng) / 2; (f(mid) ? ok : ng) = mid; } return ok; } template < class T, class F > T bin_search_real(T ok, T ng, F f, int step = 80) { while(step--) { T mid = (ok + ng) / 2; (f(mid) ? ok : ng) = mid; } return ok; } #line 2 "cp-library/src/algorithm/argsort.hpp" template < class T > std::vector< int > argsort(const std::vector< T > &a) { std::vector< int > ids((int)a.size()); std::iota(ids.begin(), ids.end(), 0); std::sort(ids.begin(), ids.end(), [&](int i, int j) { return a[i] < a[j] || (a[i] == a[j] && i < j); }); return ids; } #line 1 "macro.hpp" namespace macro { using size_type = int; template < class container > void sort(container& a) { std::sort(std:: begin(a), std:: end(a)); } template < class container > void rsort(container& a) { std::sort(std::rbegin(a), std::rend(a)); } template < class container > void reverse(container& a) { std::reverse(std::begin(a), std::end(a)); } template < class container > void unique(container& a) { std::sort(std::begin(a), std::end(a)); a.erase(std::unique(std::begin(a), std::end(a)), std::end(a)); } template < class container > container sorted(const container& a) { container b = a; sort(b); return std::move(b); } template < class container > container rsorted(const container& a) { container b = a; rsort(b); return std::move(b); } template < class container, class compare > void sort(container& a, const compare& cmp) { std::sort(std::begin(a), std::end(a), cmp); } template < class container, class compare > container sorted(const container& a, const compare& cmp) { container b = a; sort(b, cmp); return std::move(b); } template < class container, class value > size_type lower_bound(const container& a, const value& x) { return std::lower_bound(std::begin(a), std::end(a), x) - std::begin(a); } template < class container, class value > size_type upper_bound(const container& a, const value& x) { return std::upper_bound(std::begin(a), std::end(a), x) - std::begin(a); } const std::vector<std::pair<size_type, size_type>> dir4 = { {+1, 0}, {-1, 0}, { 0, +1}, { 0, -1} }; const std::vector<std::pair<size_type, size_type>> dir8 = { {-1, -1}, {-1, 0}, {-1, +1}, { 0, -1}, { 0, +1}, {+1, -1}, {+1, 0}, {+1, +1} }; #ifdef _DEBUG #define debug(x) std::cout << "[" << __LINE__ << "] " << #x << ": " << x << std::endl #else #define debug(x) #endif template < class container > void concat(container& a, const container& b) { a.insert(std::end(a), std::begin(b), std::end(b)); } std::vector<size_type> iota(const size_type n) { std::vector<size_type> I(n); std::iota(std::begin(I), std::end(I), 0); return I; } template < class container > std::vector<size_type> sort_idx(const container& a) { const size_type n = a.size(); std::vector<size_type> I = iota(n); std::sort(std::begin(I), std::end(I), [&](size_type i, size_type j) { return a[i] < a[j] or (a[i] == a[j] and i < j); }); return I; } template < class container, class compare > std::vector<size_type> sort_idx(const container& a, const compare& cmp) { const size_type n = a.size(); std::vector<size_type> I = iota(n); std::sort(std::begin(I), std::end(I), [&](size_type i, size_type j) { return cmp(a[i], a[j]) or (a[i] == a[j] and i < j); }); return std::move(I); } struct grid { using size_type = int; size_type H, W; grid(const size_type H, const size_type W) : H(H), W(W) {} bool contains(const size_type i, const size_type j) { return 0 <= i and i < H and 0 <= j and j < W; } }; using f64 = long double; template < class T > vector< T >& operator++(vector< T >& a) { for(T& x : a) x++; return a; } template < class T > vector< T >& operator--(vector< T >& a) { for(T& x : a) x--; return a; } template < class T > vector< T > operator++(vector< T >& a, signed) { vector< T > res = a; for(T& x : a) x++; return res; } template < class T > vector< T > operator--(vector< T >& a, signed) { vector< T > res = a; for(T& x : a) x--; return res; } } // namespace macro using namespace macro; #line 3 "A.cpp" int main() { int N = in(); vector<int> A = in(N); vector<pair<int,int>> B(N); for(int i : rep(N)) B[i] = {A[i], i}; sort(B); auto [i, j] = [&] { for(int i : rep(N - 1)) { if(B[i].first == B[i + 1].first) { return make_pair(B[i].second, B[i + 1].second); } } return make_pair(-1, -1); }(); if(make_pair(i, j) != make_pair(-1, -1)) { vector<int> P1 = iota(N), P2 = iota(N); swap(P2[i], P2[j]); print(++P1); print(++P2); int Xor = 0; for(int i : rep(N)) Xor ^= (P1[i] + A[i]) ^ (P2[i] + A[i]); return 0; } else { if(N <= 8) { vector<int> P1 = iota(N), P2 = iota(N); do { do { int Xor = 0; for(int i : rep(N)) Xor ^= (P1[i] + 1 + A[i]) ^ (P2[i] + 1 + A[i]); if(Xor == 0 and P1 != P2) { print(++P1); print(++P2); return 0; } } while(next_permutation(P2.begin(), P2.end())); } while(next_permutation(P1.begin(), P1.end())); print(-1); } else { vector<int> P1(N, -1), P2(N, -1); int x = 1; for(int i : rep(N)) { if(A[i] % 4 == 0) { if(x <= 2) { P1[i] = x; P2[i] = 3 - x; x++; } } } assert(x == 3); for(int i : rep(N)) if(P1[i] == -1) { P1[i] = x; P2[i] = x; x++; } assert(x == N + 1); print(P1); print(P2); } } }