Submission #696565

# Submission time Handle Problem Language Result Execution time Memory
696565 2023-02-06T22:10:49 Z Deepesson Let's Win the Election (JOI22_ho_t3) C++17
11 / 100
2500 ms 5100 KB
#include <bits/stdc++.h>
#define MAX 505
typedef std::pair<double,int> pdd;
typedef std::pair<long long ,long long> pii;
using ll = long long;
double LGD;
int existe[MAX][MAX];
pdd tab[MAX][MAX];
int rodada=52;
int K=0;
std::vector<pii> regs;
int N;
long long C;
double inf = 1LL<<50LL;
pdd dp(int pos,int falta){
    if(pos==N&&!falta)return {0.0,0};
    if(pos==N){
        return {inf,0};
    }
    if(existe[pos][falta]==rodada)return tab[pos][falta];
    existe[pos][falta]=rodada;
    double pegou = (K-falta)+1;
    pdd ans = {inf,0};
    if(falta){
        double custo = (double)regs[pos].first/(double)pegou;
        pdd g = dp(pos+1,falta-1);
        g.first+=custo;
        ans=std::min(ans,g);
    }
    {
        if(regs[pos].second<=C){
            double custo = (double)regs[pos].second/(double)(K+1);
            pdd g = dp(pos+1,falta);
            g.first+=custo-((double)C/(double)(K+1));
            ++g.second;
            ans=std::min(ans,g);
        }else {pdd g =dp(pos+1,falta);ans=std::min(ans,g);}
    }
    return tab[pos][falta]=ans;
}
int main()
{
    int obj;
    std::cin>>N>>obj;
    for(int i=0;i!=N;++i){
        ll a,b;
        std::cin>>a>>b;
        if(b==-1)b=inf;
        regs.push_back({b,a});
    }
    std::sort(regs.begin(),regs.end());
    double ans=inf;
    for(K=0;K<=obj;++K){
        ll l=0,r=1000;
        while(l<r){
            ll m = (l+r)/2;
            C=m;
            ++rodada;
            auto x = dp(0,K);
            if(x.second>=obj-K){
                r=m;
            }else l=m+1;
        }
        ++rodada;
        C=l;
        auto kek = dp(0,K);
        int quer = obj-K;
        kek.first+=(double)quer*((double)l/(double)(K+1));
        ///Pegar quantos a mais selecionei
        ll dif = kek.second-(obj-K);
        ///Descontar os extras (note que eu consigo garantir que o custo eh L)
        kek.first-=((double)(dif*l))/(double)(K+1);
        ans=std::min(ans,kek.first);
    }
    std::cout<<std::fixed<<std::setprecision(20)<<ans<<"\n";
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Incorrect 122 ms 3772 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Incorrect 122 ms 3772 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 312 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 304 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 312 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 312 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 304 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 312 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 432 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 1 ms 340 KB Output is correct
20 Correct 1 ms 436 KB Output is correct
21 Correct 1 ms 340 KB Output is correct
22 Correct 1 ms 340 KB Output is correct
23 Correct 1 ms 340 KB Output is correct
24 Correct 1 ms 436 KB Output is correct
25 Correct 1 ms 340 KB Output is correct
26 Correct 1 ms 340 KB Output is correct
27 Correct 1 ms 340 KB Output is correct
28 Correct 2 ms 340 KB Output is correct
29 Correct 1 ms 340 KB Output is correct
30 Incorrect 1 ms 340 KB Output isn't correct
31 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 312 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 304 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 312 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 1 ms 432 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 1 ms 340 KB Output is correct
20 Correct 1 ms 436 KB Output is correct
21 Correct 1 ms 340 KB Output is correct
22 Correct 1 ms 340 KB Output is correct
23 Correct 1 ms 340 KB Output is correct
24 Correct 1 ms 436 KB Output is correct
25 Correct 1 ms 340 KB Output is correct
26 Correct 1 ms 340 KB Output is correct
27 Correct 1 ms 340 KB Output is correct
28 Correct 2 ms 340 KB Output is correct
29 Correct 1 ms 340 KB Output is correct
30 Incorrect 1 ms 340 KB Output isn't correct
31 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2586 ms 5100 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Incorrect 122 ms 3772 KB Output isn't correct
6 Halted 0 ms 0 KB -