Submission #750764

# Submission time Handle Problem Language Result Execution time Memory
750764 2023-05-30T09:14:36 Z Kihihihi Let's Win the Election (JOI22_ho_t3) C++17
10 / 100
576 ms 4588 KB
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <cassert>
#include <ctime>
#include <chrono>
#include <cstdio>
#include <random>
#include <vector>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <deque>
#include <queue>
#include <bitset>
#include <list>
#include <fstream>
#include <functional>
#include <complex>
using namespace std;
mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());

short skip_cin = 0;
const long long INF = 1e18, MOD = 1e9 + 7, MOD2 = 998244353, LOG = 19;
const long double EPS = 1e-9, PI = acos(-1);

void solve()
{
    long long n, k;
    vector<pair<double, double>> v;
    cin >> n >> k;
    v.resize(n);
    for (long long i = 0; i < n; i++)
    {
        cin >> v[i].first >> v[i].second;
    }
    sort(v.begin(), v.end(),
        [](pair<double, double>& x, pair<double, double>& y)
        {
            if (x.second == y.second)
            {
                return x.first < y.first;
            }

            if (x.second == -1)
            {
                return false;
            }
            if (y.second == -1)
            {
                return true;
            }
            return x.second < y.second;
        }
    );

    vector<vector<double>> dp(k + 1, vector<double>(k + 1, INF));
    dp[0][0] = 0;
    for (long long i = 0; i < n; i++)
    {
        vector<vector<double>> upd(k + 1, vector<double>(k + 1, INF));
        for (long long fr = 0; fr < k + 1; fr++)
        {
            for (long long hv = 1; hv < k + 1; hv++)
            {
                upd[fr][hv] = dp[fr][hv - 1] + v[i].first / (double)(fr + 1);
                if (fr > 0 && v[i].second != -1)
                {
                    upd[fr][hv] = min(upd[fr][hv], dp[fr - 1][hv - 1] + v[i].second / (double)fr);
                }
                upd[fr][hv] = min(upd[fr][hv], dp[fr][hv]);
            }
        }
        swap(dp, upd);
    }

    double ans = INF;
    for (long long i = 0; i < k + 1; i++)
    {
        ans = min(ans, dp[i][k]);
    }
    cout << fixed << setprecision(20) << ans << "\n";
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    srand(time(NULL));

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

    return 0;
}

/*
<3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠤⠖⠚⢉⣩⣭⡭⠛⠓⠲⠦⣄⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⡴⠋⠁⠀⠀⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⢦⡀⠀⠀⠀⠀
⠀⠀⠀⠀⢀⡴⠃⢀⡴⢳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣆⠀⠀⠀
⠀⠀⠀⠀⡾⠁⣠⠋⠀⠈⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢧⠀⠀
⠀⠀⠀⣸⠁⢰⠃⠀⠀⠀⠈⢣⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣇⠀
⠀⠀⠀⡇⠀⡾⡀⠀⠀⠀⠀⣀⣹⣆⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⠀
⠀⠀⢸⠃⢀⣇⡈⠀⠀⠀⠀⠀⠀⢀⡑⢄⡀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇
⠀⠀⢸⠀⢻⡟⡻⢶⡆⠀⠀⠀⠀⡼⠟⡳⢿⣦⡑⢄⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇
⠀⠀⣸⠀⢸⠃⡇⢀⠇⠀⠀⠀⠀⠀⡼⠀⠀⠈⣿⡗⠂⠀⠀⠀⠀⠀⠀⠀⢸⠁
⠀⠀⡏⠀⣼⠀⢳⠊⠀⠀⠀⠀⠀⠀⠱⣀⣀⠔⣸⠁⠀⠀⠀⠀⠀⠀⠀⢠⡟⠀
⠀⠀⡇⢀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀
⠀⢸⠃⠘⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠁⠀⠀⢀⠀⠀⠀⠀⠀⣾⠀⠀
⠀⣸⠀⠀⠹⡄⠀⠀⠈⠁⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠸⠀⠀⠀⠀⠀⡇⠀⠀
⠀⡏⠀⠀⠀⠙⣆⠀⠀⠀⠀⠀⠀⠀⢀⣠⢶⡇⠀⠀⢰⡀⠀⠀⠀⠀⠀⡇⠀⠀
⢰⠇⡄⠀⠀⠀⡿⢣⣀⣀⣀⡤⠴⡞⠉⠀⢸⠀⠀⠀⣿⡇⠀⠀⠀⠀⠀⣧⠀⠀
⣸⠀⡇⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⢹⠀⠀⢸⠀⠀⢀⣿⠇⠀⠀⠀⠁⠀⢸⠀⠀
⣿⠀⡇⠀⠀⠀⠀⠀⢀⡤⠤⠶⠶⠾⠤⠄⢸⠀⡀⠸⣿⣀⠀⠀⠀⠀⠀⠈⣇⠀
⡇⠀⡇⠀⠀⡀⠀⡴⠋⠀⠀⠀⠀⠀⠀⠀⠸⡌⣵⡀⢳⡇⠀⠀⠀⠀⠀⠀⢹⡀
⡇⠀⠇⠀⠀⡇⡸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠮⢧⣀⣻⢂⠀⠀⠀⠀⠀⠀⢧
⣇⠀⢠⠀⠀⢳⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡎⣆⠀⠀⠀⠀⠀⠘
⢻⠀⠈⠰⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⠘⢮⣧⡀⠀⠀⠀⠀
⠸⡆⠀⠀⠇⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠆⠀⠀⠀⠀⠀⠀⠀⠙⠳⣄⡀⢢⡀
<3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3 <3
*/
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 4 ms 340 KB Output is correct
6 Correct 21 ms 584 KB Output is correct
7 Correct 102 ms 1736 KB Output is correct
8 Correct 217 ms 2728 KB Output is correct
9 Correct 393 ms 4368 KB Output is correct
10 Correct 195 ms 2528 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 4 ms 340 KB Output is correct
6 Correct 21 ms 584 KB Output is correct
7 Correct 102 ms 1736 KB Output is correct
8 Correct 217 ms 2728 KB Output is correct
9 Correct 393 ms 4368 KB Output is correct
10 Correct 195 ms 2528 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 49 ms 700 KB Output is correct
13 Correct 42 ms 700 KB Output is correct
14 Correct 35 ms 700 KB Output is correct
15 Correct 273 ms 2396 KB Output is correct
16 Correct 282 ms 2268 KB Output is correct
17 Correct 209 ms 2396 KB Output is correct
18 Correct 548 ms 4416 KB Output is correct
19 Correct 517 ms 4588 KB Output is correct
20 Correct 424 ms 4372 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 576 ms 4468 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 4 ms 340 KB Output is correct
6 Correct 21 ms 584 KB Output is correct
7 Correct 102 ms 1736 KB Output is correct
8 Correct 217 ms 2728 KB Output is correct
9 Correct 393 ms 4368 KB Output is correct
10 Correct 195 ms 2528 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 49 ms 700 KB Output is correct
13 Correct 42 ms 700 KB Output is correct
14 Correct 35 ms 700 KB Output is correct
15 Correct 273 ms 2396 KB Output is correct
16 Correct 282 ms 2268 KB Output is correct
17 Correct 209 ms 2396 KB Output is correct
18 Correct 548 ms 4416 KB Output is correct
19 Correct 517 ms 4588 KB Output is correct
20 Correct 424 ms 4372 KB Output is correct
21 Incorrect 1 ms 212 KB Output isn't correct
22 Halted 0 ms 0 KB -