Submission #1110979

# Submission time Handle Problem Language Result Execution time Memory
1110979 2024-11-11T08:28:47 Z jerzyk Catfish Farm (IOI22_fish) C++17
58 / 100
1000 ms 231828 KB
#include <bits/stdc++.h>
#include "fish.h"

using namespace std;
#define pb push_back
#define st first
#define nd second
typedef long long ll;
typedef long double ld;
const ll I = 1000LL * 1000LL * 1000LL * 1000LL * 1000LL * 1000LL;
const int II = 2 * 1000 * 1000 * 1000;
const ll M = 1000LL * 1000LL * 1000LL + 7LL;
const int N = 1000 * 1000 + 7;
vector<pair<int, ll>> cat[N];
vector<int> dpv[N];
vector<ll> dp[N][2], sl[N], as[N], sr[N];

void CntS(int n)
{
    for(int l = 0; l <= n; ++l)
    {
        int j1 = 0, j2 = 0, j3 = 0;
        ll s1 = 0, s2 = 0, s3 = 0;
        //cerr << l << " " << dpv[l].size() << " " << as[l].size() << "\n";
        for(int i = 1; i < (int)dpv[l].size(); ++i)
        {
            while(l > 0 && j1 < (int)cat[l - 1].size() - 1 && cat[l - 1][j1 + 1].st <= dpv[l][i])
            {
                ++j1;
                s1 += cat[l - 1][j1].nd;
            }
            while(j2 < (int)cat[l].size() - 1 && cat[l][j2 + 1].st <= dpv[l][i])
            {
                ++j2;
                s2 += cat[l][j2].nd;
            }
            while(j3 < (int)cat[l + 1].size() - 1 && cat[l + 1][j3 + 1].st <= dpv[l][i])
            {
                ++j3;
                s3 += cat[l + 1][j3].nd;
            }
            //cerr << i << " ";
            sl[l][i] = s1; as[l][i] = s2; sr[l][i] = s3;
        }
    }
}

void Do1()
{
    for(int i = 1; i < (int)dpv[1].size(); ++i)
    {
        dp[1][0][i] = sr[1][i];
        //dp[1][2][i] = sr[1][i];
    }
}

void CntDP(int n)
{
    Do1();
    for(int l = 2; l <= n; ++l)
    {
        for(int i = 0; i < (int)dpv[l].size(); ++i)
        {
            for(int j = 0; j < (int)dpv[l - 2].size(); ++j)
            {
                if(dpv[l - 2][j] <= dpv[l][i])
                    dp[l][0][i] = max(dp[l][0][i], dp[l - 2][0][j] - sr[l - 2][j] + sl[l][i]);
                else
                    dp[l][0][i] = max(dp[l][0][i], dp[l - 2][0][j]);
            }
            dp[l][1][i] = dp[l][0][i];
            for(int j = 0; j < (int)dpv[l - 1].size(); ++j)
            {
                if(dpv[l - 1][j] <= dpv[l][i])
                    dp[l][1][i] = max(dp[l][1][i], dp[l - 1][1][j] + sl[l][i] - as[l - 1][j]);
                if(dpv[l - 1][j] >= dpv[l][i])
                    dp[l][0][i] = max(dp[l][0][i], dp[l - 1][0][j] - as[l][i]);
            }
            dp[l][0][i] = max(dp[l][0][i], dp[l][1][i]) + sr[l][i];
            //cerr << l << " " << i << " " << dp[l][0][i] << " " << dp[l][1][i] << "\n";
        }
    }
}

long long max_weights(int _N, int _M, vector<int> X, vector<int> Y, vector<int> W)
{
    int n = _N, m = _M;
    for(int i = 0; i < m; ++i)
        {X[i] += 1; Y[i] += 1;}
    for(int i = 0; i <= n + 1; ++i)
    {
        dpv[i].pb(0);
        cat[i].pb(make_pair(0, 0LL));
    }
    for(int i = 0; i < m; ++i)
    {
        cat[X[i]].pb(make_pair(Y[i], W[i]));
        if(X[i] > 1)
            dpv[X[i] - 1].pb(Y[i]);
        if(X[i] < N)
            dpv[X[i] + 1].pb(Y[i]);
    }
    for(int l = 0; l <= n; ++l)
    {
        sort(cat[l].begin(), cat[l].end());
        sort(dpv[l].begin(), dpv[l].end());
        vector<int> nw;
        for(int i = 0; i < (int)dpv[l].size(); ++i)
            if(i == 0 || dpv[l][i] != dpv[l][i - 1])
                nw.pb(dpv[l][i]);
        dpv[l] = nw;
        for(int i = 0; i < (int)dpv[l].size(); ++i)
            dp[l][0].pb(0LL);
        dp[l][1] = dp[l][0];
        sl[l] = dp[l][0]; as[l] = dp[l][0]; sr[l] = dp[l][0];
    }
    CntS(n);
    CntDP(n);
    //cerr << "XD\n";
    ll ans = 0LL;
    for(int i = 1; i <= n; ++i)
        for(int j = 0; j < (int)dpv[i].size(); ++j)
            ans = max(ans, dp[i][0][j]);
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 162 ms 191012 KB Output is correct
2 Correct 188 ms 196520 KB Output is correct
3 Correct 134 ms 186608 KB Output is correct
4 Correct 135 ms 186720 KB Output is correct
5 Execution timed out 1085 ms 231828 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 102 ms 164680 KB Output is correct
2 Execution timed out 1087 ms 201532 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 134 ms 186696 KB Output is correct
2 Correct 132 ms 186696 KB Output is correct
3 Correct 169 ms 187340 KB Output is correct
4 Correct 165 ms 188684 KB Output is correct
5 Correct 202 ms 190536 KB Output is correct
6 Correct 199 ms 190456 KB Output is correct
7 Correct 202 ms 190560 KB Output is correct
8 Correct 221 ms 192072 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 105 ms 164696 KB Output is correct
2 Correct 108 ms 164764 KB Output is correct
3 Correct 108 ms 164680 KB Output is correct
4 Correct 105 ms 164684 KB Output is correct
5 Correct 97 ms 164680 KB Output is correct
6 Correct 94 ms 164680 KB Output is correct
7 Correct 110 ms 164680 KB Output is correct
8 Correct 105 ms 164680 KB Output is correct
9 Correct 111 ms 164728 KB Output is correct
10 Correct 104 ms 164948 KB Output is correct
11 Correct 119 ms 164912 KB Output is correct
12 Correct 103 ms 164768 KB Output is correct
13 Correct 118 ms 164712 KB Output is correct
14 Correct 105 ms 164948 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 105 ms 164696 KB Output is correct
2 Correct 108 ms 164764 KB Output is correct
3 Correct 108 ms 164680 KB Output is correct
4 Correct 105 ms 164684 KB Output is correct
5 Correct 97 ms 164680 KB Output is correct
6 Correct 94 ms 164680 KB Output is correct
7 Correct 110 ms 164680 KB Output is correct
8 Correct 105 ms 164680 KB Output is correct
9 Correct 111 ms 164728 KB Output is correct
10 Correct 104 ms 164948 KB Output is correct
11 Correct 119 ms 164912 KB Output is correct
12 Correct 103 ms 164768 KB Output is correct
13 Correct 118 ms 164712 KB Output is correct
14 Correct 105 ms 164948 KB Output is correct
15 Correct 100 ms 164680 KB Output is correct
16 Correct 96 ms 165024 KB Output is correct
17 Correct 152 ms 170312 KB Output is correct
18 Correct 154 ms 170824 KB Output is correct
19 Correct 138 ms 170816 KB Output is correct
20 Correct 137 ms 170568 KB Output is correct
21 Correct 132 ms 170312 KB Output is correct
22 Correct 189 ms 176200 KB Output is correct
23 Correct 101 ms 166216 KB Output is correct
24 Correct 129 ms 169032 KB Output is correct
25 Correct 94 ms 164884 KB Output is correct
26 Correct 114 ms 165960 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 105 ms 164696 KB Output is correct
2 Correct 108 ms 164764 KB Output is correct
3 Correct 108 ms 164680 KB Output is correct
4 Correct 105 ms 164684 KB Output is correct
5 Correct 97 ms 164680 KB Output is correct
6 Correct 94 ms 164680 KB Output is correct
7 Correct 110 ms 164680 KB Output is correct
8 Correct 105 ms 164680 KB Output is correct
9 Correct 111 ms 164728 KB Output is correct
10 Correct 104 ms 164948 KB Output is correct
11 Correct 119 ms 164912 KB Output is correct
12 Correct 103 ms 164768 KB Output is correct
13 Correct 118 ms 164712 KB Output is correct
14 Correct 105 ms 164948 KB Output is correct
15 Correct 100 ms 164680 KB Output is correct
16 Correct 96 ms 165024 KB Output is correct
17 Correct 152 ms 170312 KB Output is correct
18 Correct 154 ms 170824 KB Output is correct
19 Correct 138 ms 170816 KB Output is correct
20 Correct 137 ms 170568 KB Output is correct
21 Correct 132 ms 170312 KB Output is correct
22 Correct 189 ms 176200 KB Output is correct
23 Correct 101 ms 166216 KB Output is correct
24 Correct 129 ms 169032 KB Output is correct
25 Correct 94 ms 164884 KB Output is correct
26 Correct 114 ms 165960 KB Output is correct
27 Correct 106 ms 165448 KB Output is correct
28 Correct 571 ms 192944 KB Output is correct
29 Execution timed out 1075 ms 206480 KB Time limit exceeded
30 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 134 ms 186696 KB Output is correct
2 Correct 132 ms 186696 KB Output is correct
3 Correct 169 ms 187340 KB Output is correct
4 Correct 165 ms 188684 KB Output is correct
5 Correct 202 ms 190536 KB Output is correct
6 Correct 199 ms 190456 KB Output is correct
7 Correct 202 ms 190560 KB Output is correct
8 Correct 221 ms 192072 KB Output is correct
9 Correct 212 ms 192212 KB Output is correct
10 Correct 169 ms 182344 KB Output is correct
11 Correct 260 ms 200264 KB Output is correct
12 Correct 107 ms 164680 KB Output is correct
13 Correct 101 ms 164680 KB Output is correct
14 Correct 95 ms 164680 KB Output is correct
15 Correct 97 ms 164780 KB Output is correct
16 Correct 99 ms 164764 KB Output is correct
17 Correct 105 ms 164724 KB Output is correct
18 Correct 129 ms 186696 KB Output is correct
19 Correct 125 ms 186696 KB Output is correct
20 Correct 129 ms 186564 KB Output is correct
21 Correct 132 ms 186696 KB Output is correct
22 Correct 219 ms 194888 KB Output is correct
23 Correct 252 ms 207440 KB Output is correct
24 Correct 283 ms 209576 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 162 ms 191012 KB Output is correct
2 Correct 188 ms 196520 KB Output is correct
3 Correct 134 ms 186608 KB Output is correct
4 Correct 135 ms 186720 KB Output is correct
5 Execution timed out 1085 ms 231828 KB Time limit exceeded
6 Halted 0 ms 0 KB -