Submission #320810

#TimeUsernameProblemLanguageResultExecution timeMemory
320810seedkinLokahian Relics (FXCUP4_lokahia)C++17
0 / 100
2 ms1004 KiB
#include "lokahia.h" #include <stdio.h> int root[205]; // who is root? int select[205]; // able to get mana? int isRoot[205]; // 1== root 0 == no int target; int findRoot(int r, int leaf) { if(r == leaf) return select[r]; int temp = root[leaf]; select[r] += select[leaf]; root[leaf] = r; select[leaf] = 0; isRoot[leaf] = 0; // isRoot[r] = 1; return temp == -1 ? select[r]: findRoot(r, temp); } int FindBase(int N){ // printf("%d\n", CollectRelics(0, 1)); target = N / 2; // int except = 0; int boss[205]; int bossNum = 0; for(int i =0; i < N; i++) { root[i] = -1; select[i] = 1; isRoot[i] = 1; boss[i] = 0; } for(int i =0; i< N;) { int s = 1; boss[bossNum++] = i; for(int j =i+1; j < N; j++) { int r = CollectRelics(i, j); if( r == -1) { s--; if(s == 0) { i = j+1; break; } continue; } int num = findRoot(i, j); if(num > target) return r; s++; } } int c = boss[bossNum-1]; for(int i =0; i < bossNum-1; i++) { int a = boss[i]; if(root[c] == root[a]) continue; int r = CollectRelics(c, a); if(r == -1) { int b = boss[i+1]; for(int j = a+1; j < b; j++) { if(root[j] == root[c]) continue; if(isRoot[j] == 0) continue; r = CollectRelics(c, j); if(r == -1) continue; int num = findRoot(c, j); if(num > target) return r; } continue; } int num = findRoot(c, a); if(num > target) return r; } return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...