제출 #154833

#제출 시각아이디문제언어결과실행 시간메모리
154833davitmarg쌀 창고 (IOI11_ricehub)C++17
100 / 100
20 ms3448 KiB
/*DavitMarg*/ #include <iostream> #include <algorithm> #include <cmath> #include <vector> #include <string> #include <cstring> #include <map> #include <set> #include <queue> #include <iomanip> #include <bitset> #include <stack> #include <cassert> #include <iterator> #include <ctype.h> #include <fstream> #define mod 1000000007ll #define LL long long #define LD long double #define MP make_pair #define PB push_back #define all(v) v.begin (),v.end() using namespace std; int n,ans; LL x[100005],pr[100005],s; LL cost(int l,int r) { int m=(l+r)/2; LL res=0; res+=(pr[r]-pr[m])-((LL)(r-m)*x[m]); l--; res+=((LL)(m-l)*x[m])-(pr[m]-pr[l]); //cout<<l<<" : "<<r<<" = "<<res<<endl; return res; } bool check(LL k) { int l,r; l=1; r=k; while(r<=n) { if(cost(l,r)<=s) return 1; l++; r++; } return 0; } int besthub(int N,int L,int X[],LL B) { n=N; s=B; for(int i=1;i<=n;i++) x[i]=X[i-1]-X[0]+1; for(int i=1;i<=n;i++) pr[i]=pr[i-1]+x[i]; int l,r,m; l=1; r=n; cost(1,n); while(l<=r) { m=(l+r)/2; if(check(m)) { l=m+1; ans=m; } else r=m-1; } return ans; } #ifdef death int main() { int N,L,X[102]; LL B; cin>>N>>L>>B; for(int i=0;i<N;i++) cin>>X[i]; cout<<besthub(N,L,X,B)<<endl;; return 0; } #endif /* 2 4 5 1 2 4+5+1 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...