Submission #682471

# Submission time Handle Problem Language Result Execution time Memory
682471 2023-01-16T09:18:14 Z Jarif_Rahman Catfish Farm (IOI22_fish) C++17
50 / 100
1000 ms 153892 KB
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define sc second
using namespace std;
typedef long long int ll;
typedef string str;

ll max_weights(int n, int m, vector<int> X, vector<int> Y, vector<int> W){
    vector<vector<pair<int, ll>>> v(n);
    map<pair<int, int>, ll> mp;
    for(int i = 0; i < n; i++) mp[{i, 0}] = 0;
    for(int i = 0; i < n; i++) mp[{i, n+1}] = 0;
    for(int i = 0; i < m; i++){
        mp[{X[i], Y[i]+1}]+=W[i];
        if(X[i]) mp[{X[i]-1, Y[i]+1}]+=0;
        if(X[i]+1 < n) mp[{X[i]+1, Y[i]+1}]+=0;
    }

    for(auto [p, w]: mp) v[p.f].pb({p.sc, w});

    for(auto &s: v) sort(s.begin(), s.end());

    vector<vector<ll>> dp_up(n), dp_down, dtu2, pref;
    vector<ll> dtu(n, 0);

    for(int i = 0; i < n; i++) dp_up[i].resize(v[i].size(), 0);
    dp_down = dp_up;
    dtu2 = dp_up;
    pref = dp_up;

    for(int i = 0; i < n; i++) for(int j = 0; j < pref[i].size(); j++){
        if(j) pref[i][j] = pref[i][j-1];
        pref[i][j]+=v[i][j].sc;
    }

    for(int i = n-1; i >= 0; i--){
        for(int j = 0; j < v[i].size(); j++){
            if(i == n-1){
                dp_down[i][j] = 0;
                dp_up[i][j] = 0;
                continue;
            }

            int in1 = lower_bound(v[i+1].begin(), v[i+1].end(), make_pair(v[i][j].f, -1LL))-v[i+1].begin();
            if(in1 == v[i+1].size()) in1--;

            dp_up[i][j]-=pref[i][j];
            dp_down[i][j]-=pref[i+1].back()-pref[i+1][in1];
            dp_up[i][j] = max(dp_up[i][j], pref[i].back()-pref[i][j]+dp_down[i+1].back());

            if(i+2 < n){
                int in2 = lower_bound(v[i+2].begin(), v[i+2].end(), make_pair(v[i][j].f, -1LL))-v[i+2].begin();
                if(in2 == v[i+2].size()) in2--;
                dp_down[i][j] = max(dp_down[i][j], dtu2[i+2][in2]+pref[i+1][in1]);
                dp_down[i][j] = max(dp_down[i][j], dtu[i+2]-pref[i+1][in1]);
                dp_down[i][j] = max(dp_down[i][j], pref[i+1].back()+dp_down[i+2].back());
            }
        }

        if(i){
            ll mx = 0, s = 0;
            auto it = v[i-1].begin();
            for(int j = 0; j < v[i].size(); j++){
                while(it != v[i-1].end() && it->f <= v[i][j].f) s+=it->sc, it++;
                mx = max(mx, s+dp_up[i][j]);
            }
            fill(dp_up[i-1].begin(), dp_up[i-1].end(), mx);
            dtu[i] = mx;

            mx = 0;
            for(int j = 0; j < v[i].size(); j++) mx = max(mx, pref[i].back()-pref[i][j]+dp_down[i][j]);
            fill(dp_down[i-1].begin(), dp_down[i-1].end(), mx);

            for(int j = 0; j < v[i].size(); j++){
                if(j) dtu2[i][j] = dtu2[i][j-1];
                dtu2[i][j] = max(dtu2[i][j], dp_up[i][j]);
            }
        }
    }

    return max(*max_element(dp_up[0].begin(), dp_up[0].end()), *max_element(dp_down[0].begin(), dp_down[0].end()));
}

Compilation message

fish.cpp: In function 'll max_weights(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
fish.cpp:32:49: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |     for(int i = 0; i < n; i++) for(int j = 0; j < pref[i].size(); j++){
      |                                               ~~^~~~~~~~~~~~~~~~
fish.cpp:38:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |         for(int j = 0; j < v[i].size(); j++){
      |                        ~~^~~~~~~~~~~~~
fish.cpp:46:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |             if(in1 == v[i+1].size()) in1--;
      |                ~~~~^~~~~~~~~~~~~~~~
fish.cpp:54:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |                 if(in2 == v[i+2].size()) in2--;
      |                    ~~~~^~~~~~~~~~~~~~~~
fish.cpp:64:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |             for(int j = 0; j < v[i].size(); j++){
      |                            ~~^~~~~~~~~~~~~
fish.cpp:72:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |             for(int j = 0; j < v[i].size(); j++) mx = max(mx, pref[i].back()-pref[i][j]+dp_down[i][j]);
      |                            ~~^~~~~~~~~~~~~
fish.cpp:75:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   75 |             for(int j = 0; j < v[i].size(); j++){
      |                            ~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 232 ms 59352 KB Output is correct
2 Correct 287 ms 68516 KB Output is correct
3 Correct 93 ms 42528 KB Output is correct
4 Correct 91 ms 42508 KB Output is correct
5 Execution timed out 1060 ms 153892 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 296 KB Output is correct
2 Correct 394 ms 73284 KB Output is correct
3 Correct 468 ms 83580 KB Output is correct
4 Correct 213 ms 59340 KB Output is correct
5 Correct 255 ms 68680 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 296 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 1 ms 300 KB Output is correct
10 Correct 94 ms 42488 KB Output is correct
11 Correct 102 ms 42488 KB Output is correct
12 Correct 280 ms 68284 KB Output is correct
13 Correct 337 ms 79560 KB Output is correct
14 Correct 251 ms 63756 KB Output is correct
15 Correct 238 ms 61960 KB Output is correct
16 Correct 251 ms 63908 KB Output is correct
17 Correct 300 ms 71100 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 98 ms 42556 KB Output is correct
2 Correct 100 ms 42532 KB Output is correct
3 Correct 152 ms 46064 KB Output is correct
4 Correct 135 ms 48208 KB Output is correct
5 Correct 254 ms 55860 KB Output is correct
6 Correct 239 ms 55196 KB Output is correct
7 Correct 250 ms 55744 KB Output is correct
8 Correct 240 ms 55864 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 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 304 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 0 ms 304 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 3 ms 724 KB Output is correct
11 Correct 2 ms 468 KB Output is correct
12 Correct 3 ms 628 KB Output is correct
13 Correct 1 ms 308 KB Output is correct
14 Correct 2 ms 596 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 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 304 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 0 ms 304 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 3 ms 724 KB Output is correct
11 Correct 2 ms 468 KB Output is correct
12 Correct 3 ms 628 KB Output is correct
13 Correct 1 ms 308 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 1 ms 420 KB Output is correct
16 Correct 4 ms 740 KB Output is correct
17 Correct 63 ms 9520 KB Output is correct
18 Correct 57 ms 8292 KB Output is correct
19 Correct 52 ms 8604 KB Output is correct
20 Correct 59 ms 7704 KB Output is correct
21 Correct 47 ms 7612 KB Output is correct
22 Correct 120 ms 14876 KB Output is correct
23 Correct 15 ms 3636 KB Output is correct
24 Correct 47 ms 8664 KB Output is correct
25 Correct 5 ms 724 KB Output is correct
26 Correct 13 ms 3156 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 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 304 KB Output is correct
7 Correct 1 ms 300 KB Output is correct
8 Correct 0 ms 304 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 3 ms 724 KB Output is correct
11 Correct 2 ms 468 KB Output is correct
12 Correct 3 ms 628 KB Output is correct
13 Correct 1 ms 308 KB Output is correct
14 Correct 2 ms 596 KB Output is correct
15 Correct 1 ms 420 KB Output is correct
16 Correct 4 ms 740 KB Output is correct
17 Correct 63 ms 9520 KB Output is correct
18 Correct 57 ms 8292 KB Output is correct
19 Correct 52 ms 8604 KB Output is correct
20 Correct 59 ms 7704 KB Output is correct
21 Correct 47 ms 7612 KB Output is correct
22 Correct 120 ms 14876 KB Output is correct
23 Correct 15 ms 3636 KB Output is correct
24 Correct 47 ms 8664 KB Output is correct
25 Correct 5 ms 724 KB Output is correct
26 Correct 13 ms 3156 KB Output is correct
27 Correct 7 ms 2672 KB Output is correct
28 Correct 470 ms 40508 KB Output is correct
29 Correct 779 ms 68216 KB Output is correct
30 Execution timed out 1026 ms 117500 KB Time limit exceeded
31 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 98 ms 42556 KB Output is correct
2 Correct 100 ms 42532 KB Output is correct
3 Correct 152 ms 46064 KB Output is correct
4 Correct 135 ms 48208 KB Output is correct
5 Correct 254 ms 55860 KB Output is correct
6 Correct 239 ms 55196 KB Output is correct
7 Correct 250 ms 55744 KB Output is correct
8 Correct 240 ms 55864 KB Output is correct
9 Correct 321 ms 80588 KB Output is correct
10 Correct 184 ms 36468 KB Output is correct
11 Correct 440 ms 72672 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 300 KB Output is correct
14 Correct 1 ms 212 KB Output is correct
15 Correct 1 ms 212 KB Output is correct
16 Correct 1 ms 212 KB Output is correct
17 Correct 1 ms 272 KB Output is correct
18 Correct 96 ms 42552 KB Output is correct
19 Correct 101 ms 42468 KB Output is correct
20 Correct 101 ms 42472 KB Output is correct
21 Correct 100 ms 42568 KB Output is correct
22 Correct 399 ms 80712 KB Output is correct
23 Incorrect 622 ms 94152 KB 1st lines differ - on the 1st token, expected: '77772396150817', found: '77782926777237'
24 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 232 ms 59352 KB Output is correct
2 Correct 287 ms 68516 KB Output is correct
3 Correct 93 ms 42528 KB Output is correct
4 Correct 91 ms 42508 KB Output is correct
5 Execution timed out 1060 ms 153892 KB Time limit exceeded
6 Halted 0 ms 0 KB -