제출 #1306382

#제출 시각아이디문제언어결과실행 시간메모리
1306382Faggi죄수들의 도전 (IOI22_prison)C++20
100 / 100
7 ms7224 KiB
#include <bits/stdc++.h> #define ll long long #define sz(x) int(x.size()) #define forn(i, n) for (i = 0; i < n; i++) #define all(x) x.begin(), x.end() #define pb push_back #define mp make_pair #define fr first #define se second using namespace std; vector<vector<int>> v; ll n; void calc(ll l, ll r, ll tip, ll sig, ll act, ll la, ll ra) { if (l > r) return; v[act][0] = tip; ll i; for (i = r; i <= ra; i++) v[act][i] = -((!tip) + 1); for (i = l; i >= la; i--) v[act][i] = -(tip + 1); l++; r--; if (act <= 12) { ll mid = ((r - l + 1) + 2) / 3; for (i = l; i <= l + mid - 1; i++) v[act][i] = sig + 1; for (i = l + mid; i <= l + mid * 2 - 1; i++) v[act][i] = sig + 2; for (i = l + mid * 2; i <= r; i++) v[act][i] = sig + 3; calc(l, l + mid - 1, !tip, sig + 3, sig + 1, l - 1, r + 1); calc(l + mid, l + mid * 2 - 1, !tip, sig + 3, sig + 2, l - 1, r + 1); calc(l + mid * 2, r, !tip, sig + 3, sig + 3, l - 1, r + 1); } else { if (l > r) return; if (r - l + 1 <= 2) { for (i = l; i <= r; i++) v[act][i] = sig + 1; calc(l, r, !tip, sig + 2, sig + 1, l - 1, r + 1); } else { ll mid = ((r - l + 1) + 1) / 2; for (i = l; i <= l + mid - 1; i++) v[act][i] = sig + 1; for (i = l + mid; i <= r; i++) v[act][i] = sig + 2; calc(l, l + mid - 1, !tip, sig + 2, sig + 1, l - 1, r + 1); calc(l + mid, r, !tip, sig + 2, sig + 2, l - 1, r + 1); } } } std::vector<std::vector<int>> devise_strategy(int N) { v.resize(21, vector<int>(N + 1, 0)); n = N; calc(1, N, 0, 0, 0, 1, N); return {v}; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...