結果
問題 |
No.1717 Levi-Civita Triangle
|
ユーザー |
|
提出日時 | 2025-07-15 18:17:04 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 37 ms / 2,000 ms |
コード長 | 2,893 bytes |
コンパイル時間 | 7,360 ms |
コンパイル使用メモリ | 355,952 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-07-15 18:17:14 |
合計ジャッジ時間 | 9,659 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 42 |
ソースコード
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> // #include <atcoder/all> // using namespace atcoder; using namespace std; using ll = long long; using pll = pair<ll, ll>; using vll = vector<ll>; using vvll = vector<vll>; using vpll = vector<pll>; using vvpll = vector<vpll>; #define rep(i, l, r) for (ll i = l; i < ll(r); i++) #define rrep(i, l, r) for (ll i = ll(r-1); i >= l; i--) #pragma region // doubling template <typename T> T fpow(T base, T id, ll exp, std::function<T(T, T)> bop); template <typename T> T fpow(T base, ll exp); template <typename T> T fpow(T base, ll exp) { T ans = 1; while (exp > 0) { if (exp & 1ll) { ans = ans * base; } base = base * base; exp >>= 1; } return ans; } template <typename T> T fpow(T base, T id, ll exp, std::function<T(T, T)> bop) { T ans = id; while (exp > 0) { if (exp & 1ll) { ans = bop(ans, base); } base = bop(base, base); exp >>= 1; } return ans; } #pragma endregion #pragma region #pragma endregion #include <atcoder/all> using namespace atcoder; using mint = modint998244353; ll nanka(ll l, ll r) { return ((r - l) %3 + 3) % 3; } vll solve(vll a) { if (a.size() == 1) return a; else { vll next; rep(i, 0, a.size() - 2) { if ( nanka(a[i], a[i+1]) == 1 && nanka(a[i+1], a[i+2]) == 1 && nanka(a[i+2], a[i]) == 1 ) { next.push_back(1); } else if ( nanka(a[i], a[i+1]) == 2 && nanka(a[i+1], a[i+2]) == 2 && nanka(a[i+2], a[i]) == 2 ) { next.push_back(2); } else { next.push_back(0); } } return solve(next); } } int main() { ll n; cin >> n; n = n * 2 + 1; vll a(n); rep(i, 0, n) { cin >> a[i]; } if (n == 1) { cout << a[0] << endl; } else { if (a[0] == a[1] || a[1] == a[2] || a[2] == a[0]) { cout << 0 << endl; } else { bool ok = true; rep(i, 3, n) { if (i % 2 == 1 && a[i] != a[1]) { ok = false; break; } if (i % 4 == 0 && a[i] != a[0]) { ok = false; break; } if (i % 4 == 2 && a[i] != a[2]) { ok = false; break; } } if (!ok) { cout << 0 << endl; } else { a.resize((n % 4 == 1) ? 5 : 3); cout << solve(a)[0] << endl; } } } }