結果
問題 | No.1377 Half xor Half |
ユーザー | risujiroh |
提出日時 | 2021-02-05 23:20:15 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,749 bytes |
コンパイル時間 | 2,032 ms |
コンパイル使用メモリ | 205,580 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-02 14:32:38 |
合計ジャッジ時間 | 7,456 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | WA | - |
testcase_05 | WA | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | AC | 2 ms
5,376 KB |
testcase_15 | AC | 2 ms
5,376 KB |
testcase_16 | WA | - |
testcase_17 | AC | 2 ms
5,376 KB |
testcase_18 | WA | - |
testcase_19 | WA | - |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | WA | - |
testcase_24 | WA | - |
testcase_25 | WA | - |
testcase_26 | WA | - |
testcase_27 | WA | - |
testcase_28 | WA | - |
testcase_29 | WA | - |
testcase_30 | AC | 2 ms
5,376 KB |
testcase_31 | AC | 1 ms
5,376 KB |
testcase_32 | WA | - |
testcase_33 | WA | - |
testcase_34 | WA | - |
testcase_35 | WA | - |
testcase_36 | WA | - |
testcase_37 | AC | 2 ms
5,376 KB |
testcase_38 | WA | - |
testcase_39 | WA | - |
testcase_40 | AC | 2 ms
5,376 KB |
testcase_41 | WA | - |
testcase_42 | WA | - |
testcase_43 | WA | - |
testcase_44 | WA | - |
testcase_45 | WA | - |
testcase_46 | WA | - |
testcase_47 | WA | - |
ソースコード
#include <bits/stdc++.h> #pragma region my_template struct Rep { struct I { int i; void operator++() { ++i; } int operator*() const { return i; } bool operator!=(I o) const { return i < *o; } }; const int l_, r_; Rep(int l, int r) : l_(l), r_(r) {} Rep(int n) : Rep(0, n) {} I begin() const { return {l_}; } I end() const { return {r_}; } }; struct Per { struct I { int i; void operator++() { --i; } int operator*() const { return i; } bool operator!=(I o) const { return i > *o; } }; const int l_, r_; Per(int l, int r) : l_(l), r_(r) {} Per(int n) : Per(0, n) {} I begin() const { return {r_ - 1}; } I end() const { return {l_ - 1}; } }; template <class F> struct Fix : private F { Fix(F f) : F(f) {} template <class... Args> decltype(auto) operator()(Args&&... args) const { return F::operator()(*this, std::forward<Args>(args)...); } }; template <class T = int> T scan() { T res; std::cin >> res; return res; } template <class T, class U = T> bool chmin(T& a, U&& b) { return b < a ? a = std::forward<U>(b), true : false; } template <class T, class U = T> bool chmax(T& a, U&& b) { return a < b ? a = std::forward<U>(b), true : false; } #ifndef LOCAL #define DUMP(...) void(0) template <int OnlineJudge, int Local> constexpr int OjLocal = OnlineJudge; #endif using namespace std; #define ALL(c) begin(c), end(c) #pragma endregion int main() { cin.tie(nullptr)->sync_with_stdio(false); cout << fixed << setprecision(20); int n = scan(); auto s = scan<string>(); auto t = scan<string>(); vector<int> a(n), b(n); for (int i : Rep(n)) { a[i] = 2 * (s[i] & 1) + (s[n + i] & 1); b[i] = 2 * (t[i] & 1) + (t[n + i] & 1); if ((a[i] == 0) ^ (b[i] == 0)) { cout << "-1\n"; exit(0); } } vector<int> ans; auto go = [&](int x) { ans.push_back(x); if (x < n) { for (int i : Rep(n)) if (i < x and a[i] & 2) a[i] ^= 1; else if (i >= x and a[i] & 1) a[i] ^= 2; } else { x -= n; for (int i : Rep(n)) if (i < x and a[i] & 1) a[i] ^= 2; else if (i >= x and a[i] & 2) a[i] ^= 1; } }; bool f = false; for (int i : Rep(n)) { if (b[i] == 1) { if (a[i] == 2) go(n); if (a[i] == 3) go(i); } else if (a[i] == 1) { go(i); if (b[i] == 2) go(n); } assert((a[i] == 1) == (b[i] == 1)); if ((a[i] == b[i]) != f) { go(i); f = a[i] == b[i]; } } DUMP(a); DUMP(b); cout << size(ans) << '\n'; for (auto&& e : ans) cout << e << '\n'; }