답안 #871848

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
871848 2023-11-11T17:59:28 Z HorizonWest Let's Win the Election (JOI22_ho_t3) C++17
23 / 100
2500 ms 1002716 KB
#include <bits/stdc++.h>
using namespace std;
 
#define endl '\n'
#define db double
#define ll __int128
#define int long long
#define pb push_back
#define fs first
#define sd second
#define Mod long(1e9 + 7)
#define all(x) x.begin(), x.end()
#define unvisited long(-1)
#define Eps double(1e-9)
#define _for(i, n) for(int i = 0; i < (n); i++)
#define dbg(x) cout << #x ": " << x << endl;
 
const int Max = 1e6 + 7, Inf = 1e9 + 7;
 
void print(bool x) { cout << (x ? "YES" : "NO") << endl; }
 
string tostring (__int128 x)
{
    string ans = "";
    while(x > 0)
    {
        ans += (x % 10 + '0');
        x /= 10;
    }
    reverse(all(ans));
    return ans;
}
 
void printdb(double ans, int k)
{
    cout << setiosflags(ios::fixed)
         << setiosflags(ios::showpoint)
         << setprecision(k) << ans << endl;
}

pair <db, db> fmin(pair<db, db> a, pair <db, db> b, db j)
{
    if(db(a.fs + a.sd / j) < db(b.fs + b.sd / j))
        return a; 
    else   
        return b; 
}
 
int prec(vector <pair<db, db>> a, vector <pair<db, db>> b, int n, int m)
{
    vector <db> take(n, 1); 

    for(db i = 1; i <= m; i++)
    {
        db Z1 = 0.0, Z2 = b[i-1].fs; int cnt = i - 1;   //cerr << b[i-1].fs << endl; 
        
        for(int j = 0; j < n; j++)
        {
            //cerr << a[j].fs << " "; 
            if(cnt == m) break;
            Z1 += take[a[j].sd] * a[j].fs / i; 
            cnt += take[a[j].sd];
        } 
        
        cnt = i - 1; take[b[i-1].sd] = 0;  

        for(int j = 0; j < n; j++)
        {
            if(cnt == m) break;
            Z2 += take[a[j].sd] * a[j].fs / (i + 1); 
            cnt += take[a[j].sd]; 
        }

        //cerr << Z1 << " " << Z2 << endl; 

        if(Z1 < Z2) return i; 
    }

    return m; 
}

void solve()
{
    int n, m; cin >> n >> m; 
    vector <pair<db, db>> v(n), a(n), b(n);

    for(int i = 0; i < n; i++) 
    {
        cin >> v[i].sd >> v[i].fs;
        if(v[i].fs == -1) v[i].fs = Inf;
        a[i].fs = v[i].sd; b[i].fs = v[i].fs; 
        a[i].sd = b[i].sd = i;   
    } 

    sort(all(v)); sort(all(a)); sort(all(b)); 
    
    db ans = Inf; int fx = prec(a, b, n, m); 
    //cerr << fx << endl; 
    for(db l = fx; l <= min(fx + 10, m); l++)
    {
        vector <vector<vector<db>>> dp(n + 2, vector <vector<db>> (
            m + 2, vector <db> (m + 2, Inf)
        )); dp[0][1][0] = 0.000; 
        
        for(db i = 0; i < n; i++)
        {
            for(db j = 1; j <= l; j++)
            {
                for(db k = 0; k <= m; k++)
                {
                    dp[i+1][j][k] = min(dp[i+1][j][k], dp[i][j][k]);  
                    dp[i+1][j][k+1] = min(dp[i+1][j][k+1], dp[i][j][k] + v[i].sd / l); 
                    if(v[i].fs != Inf)
                    {
                        dp[i+1][j+1][k+1] = min(dp[i+1][j+1][k+1], dp[i][j][k] + v[i].fs / j); 
                    } 
                }
            }
            ans = min(ans, dp[i+1][l][m]); 
        }
    }
 
    printdb(ans, 5); 
}
 
int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    int Q = 1; //cin >> Q;
 
    while (Q--)
    {
        solve();
    }
 
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 460 KB Output is correct
5 Correct 61 ms 12308 KB Output is correct
6 Correct 331 ms 66044 KB Output is correct
7 Correct 1255 ms 255752 KB Output is correct
8 Execution timed out 2532 ms 566032 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 460 KB Output is correct
5 Correct 61 ms 12308 KB Output is correct
6 Correct 331 ms 66044 KB Output is correct
7 Correct 1255 ms 255752 KB Output is correct
8 Execution timed out 2532 ms 566032 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 344 KB Output is correct
9 Correct 0 ms 344 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 456 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 344 KB Output is correct
9 Correct 0 ms 344 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 456 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 344 KB Output is correct
16 Correct 1 ms 604 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 0 ms 456 KB Output is correct
21 Correct 1 ms 352 KB Output is correct
22 Correct 1 ms 452 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 1 ms 352 KB Output is correct
25 Correct 1 ms 352 KB Output is correct
26 Correct 1 ms 352 KB Output is correct
27 Correct 0 ms 352 KB Output is correct
28 Correct 1 ms 356 KB Output is correct
29 Correct 1 ms 360 KB Output is correct
30 Correct 1 ms 356 KB Output is correct
31 Correct 0 ms 360 KB Output is correct
32 Correct 1 ms 360 KB Output is correct
33 Correct 0 ms 360 KB Output is correct
34 Correct 1 ms 352 KB Output is correct
35 Correct 1 ms 604 KB Output is correct
36 Correct 1 ms 352 KB Output is correct
37 Correct 1 ms 352 KB Output is correct
38 Correct 0 ms 348 KB Output is correct
39 Correct 1 ms 348 KB Output is correct
40 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 344 KB Output is correct
9 Correct 0 ms 344 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 456 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 344 KB Output is correct
16 Correct 1 ms 604 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 0 ms 456 KB Output is correct
21 Correct 1 ms 352 KB Output is correct
22 Correct 1 ms 452 KB Output is correct
23 Correct 1 ms 348 KB Output is correct
24 Correct 1 ms 352 KB Output is correct
25 Correct 1 ms 352 KB Output is correct
26 Correct 1 ms 352 KB Output is correct
27 Correct 0 ms 352 KB Output is correct
28 Correct 1 ms 356 KB Output is correct
29 Correct 1 ms 360 KB Output is correct
30 Correct 1 ms 356 KB Output is correct
31 Correct 0 ms 360 KB Output is correct
32 Correct 1 ms 360 KB Output is correct
33 Correct 0 ms 360 KB Output is correct
34 Correct 1 ms 352 KB Output is correct
35 Correct 1 ms 604 KB Output is correct
36 Correct 1 ms 352 KB Output is correct
37 Correct 1 ms 352 KB Output is correct
38 Correct 0 ms 348 KB Output is correct
39 Correct 1 ms 348 KB Output is correct
40 Correct 1 ms 344 KB Output is correct
41 Correct 2 ms 732 KB Output is correct
42 Correct 2 ms 732 KB Output is correct
43 Correct 6 ms 1368 KB Output is correct
44 Incorrect 5 ms 1372 KB Output isn't correct
45 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2588 ms 1002716 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 460 KB Output is correct
5 Correct 61 ms 12308 KB Output is correct
6 Correct 331 ms 66044 KB Output is correct
7 Correct 1255 ms 255752 KB Output is correct
8 Execution timed out 2532 ms 566032 KB Time limit exceeded
9 Halted 0 ms 0 KB -