Submission #1211061

#TimeUsernameProblemLanguageResultExecution timeMemory
1211061moondarksideRice Hub (IOI11_ricehub)C++20
68 / 100
19 ms3004 KiB
#include <iostream> #include<bits/stdc++.h> using namespace std; int findRiceFromSpot(int pos,vector<long long>& CarryValuesR,vector<long long>& CarryValuesL,int X[],long long money){ long long Md=min(pos,(int)CarryValuesR.size()-pos-1); int r=(int)CarryValuesR.size(); long long mD=0; int best=1; while(Md>mD){ long long mid=(Md+mD-1)/2+1; long long price=CarryValuesR[pos]-CarryValuesR[pos-mid]-(X[pos]-X[pos-mid])*(pos-mid); price+=CarryValuesL[r-1-pos]-CarryValuesL[r-1-pos-mid]-(X[pos+mid]-X[pos])*(r-1-pos-mid); if(price>money){ Md=mid-1; } else{ mD=mid; } } best=best+mD*2; if(pos-mD>0){ long long price=CarryValuesR[pos]-CarryValuesR[pos-mD-1]-(X[pos]-X[pos-mD-1])*(pos-mD-1); price+=CarryValuesL[r-1-pos]-CarryValuesL[r-1-pos-mD]-(X[pos+mD]-X[pos])*(r-1-pos-mD); if(price<=money){ best=best+1; } } return best; } int besthub(int R,int L,int X[],long long B){ std::vector<long long> CarryValuesR; std::vector<long long> CarryValuesL; CarryValuesR.push_back(0); CarryValuesL.push_back(0); for(int i=1;i<R;i++){ long long price=CarryValuesR[i-1]+(X[i]-X[i-1])*(i); CarryValuesR.push_back(price); } for(int i=1;i<R;i++){ long long price=CarryValuesL[i-1]+(X[R-i]-X[R-i-1])*(i); CarryValuesL.push_back(price); } int Maximum=0; for(int i=0;i<R;i++){ Maximum=max(Maximum,findRiceFromSpot(i,CarryValuesR,CarryValuesL,X,B)); } return Maximum; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...