Submission #1311095

#TimeUsernameProblemLanguageResultExecution timeMemory
1311095wangzhiyi33Let's Win the Election (JOI22_ho_t3)C++20
100 / 100
65 ms4456 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define double long double
#pragma GCC optimize("O3,unroll-loops")
#define fir first
#define sec second
#define pb push_back

int n,k;
vector<pair<int,int> >tmp;

double brp(int m){
    vector<vector<double> >dp(n+1,vector<double>(k+1,1e18));

    dp[0][0]=0;
    for(int q=1;q<=n;q++){
        for(int w=0;w<=min(k,q);w++){
            // ambil a nya
            if(w)dp[q][w]=min(dp[q][w],dp[q-1][w-1]+(double)(tmp[q].second)/(double)(m+1));

            // ambil b nya
            if((q-w)>m){
                dp[q][w]=min(dp[q][w],dp[q-1][w]);
            }
            else{
                dp[q][w]=min(dp[q][w],dp[q-1][w]+(double)(tmp[q].first)/(double)(q-w));
            }
            //cout<<q<<" "<<w<<" "<<dp[q][w]<<endl;
        }
    }
    return dp[n][k-m];
   
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>k;
    int a[n+1],b[n+1];
    tmp.push_back({0,0});

    int hah=0;
    for(int q=1;q<=n;q++){
        cin>>a[q]>>b[q];
        if(b[q]==-1)tmp.push_back({1e18,a[q]});
        else tmp.push_back({b[q],a[q]}),hah++;
    }
    sort(tmp.begin(),tmp.end());

    int l=0,r=min(k,hah);
    // for(int q=0;q<=k;q++){
    //     cout<<brp(q)<<endl;
    // }
    double ans=1e18;
    while(r-l>2){
        int mid1=l+(r-l)/3;
        int mid2=r-(r-l)/3;

        double satu=brp(mid1),dua=brp(mid2);
        if(satu<dua){
            ans=min(ans,satu);
            r=mid2-1;
        }
        else{
            ans=min(ans,dua);
            l=mid1+1;
        }
    }

    for(int q=l;q<=r;q++){
        ans=min(ans,brp(q));
    }
    cout<<fixed<<setprecision(10)<<ans<<endl;
}
#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...