Submission #1235402

#TimeUsernameProblemLanguageResultExecution timeMemory
1235402hamanp87Let's Win the Election (JOI22_ho_t3)C++17
100 / 100
633 ms8400 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using ld=long double;

//#pragma GCC optimize("03,unroll-loops")
//#pragma GCC target("avx2")
//#pragma GCC target("sse4")

#define all(v) v.begin(),v.end()
#define F first
#define S second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
//#define randi uniform_int_distribution<long long>
#define damoon(v) v.resize(unique(all(v))-v.begin())
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
//randi dist(0,10000000000000000);

typedef pair<int,int> pii;
typedef pair<long long,long long> pll;
typedef pair<int,bool> pib;
typedef pair<long long,bool> plb;
typedef pair<int,pii> pip;
typedef pair<pii,int> ppi;
typedef vector<int> veci;
typedef vector<long long> vecl;
typedef vector<bool> vecb;
typedef vector<pll> vecp;
typedef set<int> seti;
typedef set<long long> setl;
typedef set<pii> setp;
typedef map<int,int> mapii;
typedef map<long long,long long> mapll;
typedef map<int,bool> mapib;
typedef map<long long,bool> maplb;

const int mod=1e9+7,neginf=-1e9,N=500;
const ll inf=2e18;
const double PI=acos(-1);
ll a[N+5],b[N+5],sum[N+5];
ld dp[2][N+5][N+5];

void solve()
{
    ll n,k;
    cin>>n>>k;
    vecp v(1);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i]>>b[i];
        if(b[i]==-1)
            b[i]=inf;
        v.pub(pll(b[i],a[i]));
    }

    sort(all(v));

    for(int i=0;i<2;i++)
        for(int j=0;j<=n;j++)
            for(int l=0;l<=n;l++)
                dp[i][j][l]=inf;

    vecl krj;
    for(int i=n;i>=1;i--)
    {
        krj.pub(v[i].S);
        sort(all(krj));
        if(k-i+1<=(int)krj.size())
        {
            for(int kk=0;kk<k-i+1;kk++)
                sum[i]+=krj[kk];
        }
        else
        {
            sum[i]=inf;
        }
    }

    ld ans=inf;
    ans=min(ans,(ld)sum[1]);
    for(int i=0;i<=k;i++)
        dp[0][0][i]=0;
    for(int i=1;i<=k;i++)
    {
        for(int kk=0;kk<=i;kk++)
        {
            for(int l=0;l<=k;l++)
            {
                dp[i&1][kk][l]=inf;

                if(kk and v[i].F!=inf)
                    dp[i&1][kk][l]=min(dp[i&1][kk][l],dp[(i&1)^1][kk-1][l]+(1/(1.0*kk))*(1.0*v[i].F));
                dp[i&1][kk][l]=min(dp[i&1][kk][l],dp[(i&1)^1][kk][l]+(1/(1.0*(l+1)))*(1.0*v[i].S));
            }
        }

        for(int j=0;j<=i;j++)
            ans=min(ans,sum[i+1]*(1/(1.0*(j+1)))+dp[i&1][j][j]);
    }

    cout<<fixed<<setprecision(15)<<ans<<"\n";
}

int main()
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(false);

    //ifstream fin("in.txt");
    //ofstream fout("out.txt");

    int t=1;
    //cin>>t;
    while(t--)
    {
        solve();
    }
}

#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...