Submission #433302

#TimeUsernameProblemLanguageResultExecution timeMemory
433302Tiago_MarquesFinding Routers (IOI20_routers)C++17
100 / 100
2 ms304 KiB
#include "routers.h" #include <bits/stdc++.h> using namespace std; typedef long long int ll; #define REP(i, a, b) for (ll i=a; i<b; i++) #define pb push_back std::vector<int> find_routers(int l, int n, int q) { if (n == 2) { int minimo = 1, maximo = l, x, y; while (minimo < maximo - 1) { int med = (minimo + maximo)/2; y = (med + 1)/2; while (2*y <= minimo) y ++; while (2*y-1 >= maximo) y --; x = use_detector(y); if (x == 0) minimo = 2*y; else maximo = 2*y - 1; } vector<int> ans; ans.pb (0); if (minimo%2 == 0) ans.pb (minimo); else ans.pb (maximo); return ans; } vector<int> ans(n); int minimo[n] = {}; int maximo[n]; REP(i, 0, n) maximo[i] = l; REP(i, 0, n) { while (minimo[i] < maximo[i]) { int med = (minimo[i] + maximo[i] + 1)/2; int x = use_detector(med); for (int j=x; j>=0; j--) { if (maximo[j] <= med - 1) break; maximo[j] = med - 1; } REP(j, x+1, n) { if (minimo[j] >= med) break; minimo[j] = med; } } } ans[0] = 0; REP(i, 1, n) ans[i] = 2*minimo[i] - ans[i-1]; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...