Submission #1193193

#TimeUsernameProblemLanguageResultExecution timeMemory
1193193alexddDistributing Candies (IOI21_candies)C++20
0 / 100
61 ms8264 KiB
#include "candies.h" #include <bits/stdc++.h> using namespace std; int n; const int INF = 1e9; vector<int> v; int calc(int lim) { int cur=0; for(int i=0;i<v.size();i++) { cur += v[i]; cur = max(cur, 0); cur = min(cur, lim); } return cur; } std::vector<int> distribute_candies(std::vector<int> c, std::vector<int> l, std::vector<int> r, std::vector<int> copv) { v = copv; n = c.size(); int e0 = calc(0), eINF = calc(INF); int st=0,dr=INF,ans=0; while(st<=dr) { int mij=(st+dr)/2; if(calc(mij) == e0) { ans = mij; st = mij+1; } else dr = mij-1; } int mic = ans; st=0,dr=INF,ans=INF; while(st<=dr) { int mij=(st+dr)/2; if(calc(mij) == eINF) { ans = mij; dr = mij-1; } else st = mij+1; } int mare = ans; long long tot=0; for(int i=0;i<v.size();i++) tot += v[i]; vector<int> sol(n); for(int i=0;i<n;i++) { if(c[i] <= mic) sol[i] = e0; else if(c[i] >= mare) sol[i] = eINF; else { assert(0 <= (long long)c[i] + tot && (long long)c[i] + tot <= c[i]); sol[i] = c[i] + tot; } } return sol; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...