제출 #150486

#제출 시각아이디문제언어결과실행 시간메모리
150486mit한의대지망생 (#200)로카히아 유적 (FXCUP4_lokahia)C++17
0 / 100
7 ms640 KiB
#include "lokahia.h" #include <algorithm> #include <vector> #include <set> #include <map> #include <cstdlib> using namespace std; int FindBase(int n) { if (n <= 2) return 0; int ord[201]; int out[201]; int same[201]; int same1[201]; for (int i = 0; i < n; ++i) ord[i] = i; srand(0x525252); random_shuffle(ord, ord + n); vector<int> L; L.push_back(0); same[0] = 1; out[0] = ord[0]; int sum = 1, c = -1; for (int i = 1; i < n; ++i) { int ret = CollectRelics(ord[L.back()], ord[i]); if (ret != -1) { out[L.back()] = out[i] = ret; ++sum; same[i] = 1; } else { out[i] = ord[i]; same[i] = 0; --sum; } if (sum == 0) { same[++i] = 1; out[i] = ord[i]; if (i <= n) L.push_back(i); ++sum; } } vector<int> C; int del = sum; for (int i = 0; i < (int)L.size() - 1; ++i) { int a = L[i], b = L[i + 1]; int ret = CollectRelics(ord[a], ord[L.back()]); if (ret != -1) { out[a] = out[L.back()] = ret; for (int j = a; j < b; ++j) same1[j] = same[j]; continue; } for (int j = a; j < b; ++j) { if (same[j]) { same1[j] = 0; continue; } int ret = CollectRelics(ord[L.back()], ord[j]); if (ret != -1) { out[L.back()] = out[j] = ret; } else if ((del -= 2) < -1) break; } if (del < -1) break; } if (sum > 1 && del < -1) return -1; if (del > -2) return out[L.back()]; if (c == -1) return -1; del = -sum; for (int i = 0; i < (int)L.size() - 1; ++i) { int a = L[i], b = L[i + 1]; int ret = -1; if (same1[a] == 0) ret = CollectRelics(ord[a], ord[L.back()]); if (ret != -1) { out[a] = out[L.back()] = ret; continue; } for (int j = a; j < b; ++j) { if (same[j] || same1[j]) { continue; } int ret = CollectRelics(ord[c], ord[j]); if (ret != -1) { out[c] = out[j] = ret; } else if ((del -= 2) < -1) break; } if (del < -1) break; } for (int i = L.back(); i < n; ++i) { if (same[i]) continue; int ret = CollectRelics(ord[c], ord[i]); if (ret != -1) { out[c] = ord[c] = ret; } else if ((del -= 2) < -1) break; } if (del < -1) return -1; return out[c]; }
#Verdict Execution timeMemoryGrader output
Fetching results...