Submission #149654

#TimeUsernameProblemLanguageResultExecution timeMemory
149654Ian and 2-bit memory (#200)Lokahian Relics (FXCUP4_lokahia)C++17
0 / 100
7 ms696 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 = 0; for (int i = 0; i < N; i++) if (v[i]) hv += max(5, v[i]); int ta = rand() % hv; for (int i = 0; i < N; i++) { if (!v[i]) continue; if (ta < max(5, v[i])) { ta = i; hv -= max(5, v[i]); break; } else ta -= max(5, v[i]); } if (!hv) break; int tb = rand() % hv; for (int i = 0; i < N; i++) { if (!v[i] || i == ta) continue; if (tb < max(5, v[i])) { tb = i; break; } else tb -= max(5, v[i]); } if (ta > tb) swap(ta, tb); int tc; if (m.count({ta, tb})) { tc = m[{ta, tb}]; cnt++; if (cnt == 20) { 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...