제출 #149602

#제출 시각아이디문제언어결과실행 시간메모리
149602Ian and 2-bit memory (#200)로카히아 유적 (FXCUP4_lokahia)C++17
0 / 100
8 ms640 KiB
#include <bits/stdc++.h> using namespace std; #include "lokahia.h" int FindBase(int N){ if (N == 1) return 0; srand(123); int left = 400 - (N - 1); vector<int> v(N, 1); map<pair<int, int>, int> m; int cnt = 0; while (left) { int hv = N; int ta = rand() % hv; for (int i = 0; i < N; i++) { if (!v[i]) continue; if (ta < v[i]) { ta = i; hv -= v[i]; break; } else ta -= v[i]; } if (!hv) break; int tb = rand() % hv; for (int i = 0; i < N; i++) { if (!v[i] || i == ta) continue; if (tb < v[i]) { tb = i; hv -= v[i]; break; } else tb -= v[i]; } if (ta > tb) swap(ta, tb); int tc; if (m.count({ta, tb})) { tc = m[{ta, tb}]; cnt++; if (cnt == 10) { cnt = 0; left--; } } else { m[{ta, tb}] = tc = CollectRelics(ta, tb); left--; cnt = 0; } if (tc != -1) { if (tc != ta) { v[tc] += v[ta]; v[ta] = 0; } if (tc != tb) { v[tc] += v[tb]; v[tb] = 0; } } } int ans = -1, ma = -1; for (int i = 0; i < N; i++) if (v[i] >= ma) { ma = v[i]; ans = i; } if (ans == -1) return ans; ma = 1; for (int i = 0; i < N; i++) if (i != ans) ma += CollectRelics(i, ans) == ans; if (ma > N / 2) return ans; return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...