제출 #731492

#제출 시각아이디문제언어결과실행 시간메모리
731492mohav48173Feast (NOI19_feast)C++14
0 / 100
1053 ms4812 KiB
    #include<bits/stdc++.h>
    using namespace std;
    int n,k;
    long long a[400000];
    long long m[400000];
    long long mincnt=0;
    double score=0;
    double get(int ind) {
        if(ind<0)return 0;
        else return m[ind];
    }
    void calc(double lam) {
        double bestscore=0;
        long long bestcnt=0;
        double bestnxt=-lam;
        long long nxtcnt=0;
        for(int i=0;i<n;i++) {
            if(bestscore-lam-get(i-1)>bestnxt ||
               (bestscore-lam-get(i-1)==bestnxt && nxtcnt>bestcnt)) {
                bestnxt=bestscore-get(i-1)-lam;
                nxtcnt=bestcnt;
            }
            if(bestnxt+get(i)>bestscore || (bestnxt+get(i)==bestscore && nxtcnt+1<bestcnt)) {
                bestscore=bestnxt+get(i);
                bestcnt=nxtcnt+1;
            }
        }
        mincnt=bestcnt;
        score=bestscore;
    }
    int main() {
        cin>>n>>k;
        for(int i=0;i<n;i++)cin>>a[i];
        m[0]=a[0];for(int i=1;i<n;i++)m[i]=m[i-1]+a[i];
        double l=0,r=1e16;
        while((r-l)>1e-6) {
            double mid=(l+r)/2;
            calc(mid);
            if(mincnt<=k)r=mid;
            else l=mid;
        }
        calc(r);
        cout<<round(score+k*r)<<endl;
        return 0;
    }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...