Submission #827125

#TimeUsernameProblemLanguageResultExecution timeMemory
827125wortelwormRice Hub (IOI11_ricehub)C++17
49 / 100
12 ms1748 KiB
#include "ricehub.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; int besthub(int RiceCount, int Length, int RiceFields[], long long Budget) { ll count_before = 0; ll count_after = 0; ll cost = 0; ll best_count = 1; for (ll i = 1; i < RiceCount; i++) { // set the hub at this field ll x = RiceFields[i]; ll distance = RiceFields[i] - RiceFields[i-1]; // account for the prev_index now also having distance count_before++; cost += distance * count_before; cost -= distance * count_after; if (count_after > 0) { count_after --; } auto add_after = [&](){ while (cost <= Budget && i+count_after < RiceCount-1) { count_after++; cost += RiceFields[i+count_after] - x; } if (cost > Budget && count_after > 0) { cost -= RiceFields[i+count_after] - x; count_after--; } }; add_after(); while ( count_before > 0 && ( cost > Budget || ( i+count_after < RiceCount-1 && (x - RiceFields[i-count_before]) > (RiceFields[i+count_after+1] - x) ) )) { cost -= x - RiceFields[i-count_before]; count_before--; add_after(); } ll current_count = count_before + count_after + 1; if (current_count > best_count) { best_count = current_count; } } return best_count; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...