제출 #1318729

#제출 시각아이디문제언어결과실행 시간메모리
1318729jump쌀 창고 (IOI11_ricehub)C++20
100 / 100
8 ms568 KiB
#include "ricehub.h"
#include<bits/stdc++.h>
#define ll long long
int besthub(int R, int L, int X[], long long B)
{
  int l=0,r=0,best=1;
  ll currB=B;
  int center=0;
  while(r<R-1){
    r+=1;
    currB-=X[r]-X[center];
    while(X[center]==X[center+1])center++;
    ll movecostre = (ll)(((r)-(center))-((center)-(l)+1))*(ll)(X[center+1]-X[center]);
    while(movecostre>0&&center!=r){
      center+=1;
      currB+=movecostre;
      movecostre = (ll)(((r)-(center))-((center)-(l)+1))*(ll)(X[center+1]-X[center]);
    }
    while(currB<0){
      if(center>l){
        currB+=X[center]-X[l];
      }
      else{
        center+=1;

        movecostre = (ll)(((r)-(center)+1))*(ll)(X[center]-X[l]);
        currB+=movecostre;
      }
      l+=1;
    }
    while(X[center]==X[center+1])center++;
    movecostre = (ll)(((r)-(center))-((center)-(l)+1))*(ll)(X[center+1]-X[center]);
    while(movecostre>0&&center!=r){
      center+=1;
      currB+=movecostre;
      movecostre = (ll)(((r)-(center))-((center)-(l)+1))*(ll)(X[center+1]-X[center]);
    }
    best=std::max(r-l+1,best);
    //std::cout << currB << ' ' << l << ' ' << center << ' ' << r << '\n';
  }
  return best;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...