Submission #873645

#TimeUsernameProblemLanguageResultExecution timeMemory
873645sleepntsheepCatfish Farm (IOI22_fish)C++17
18 / 100
71 ms14436 KiB
#include <cstdio>
#include <cstring>
#include <cassert>
#include <string>
#include <deque>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
#include <iostream>
#include <utility>
#include <numeric>
using namespace std;
using ll=long long;

#define N 200005
#define ALL(x) x.begin(), x.end()

int n, m, *x, *y, *w;

long long max_weights(int n_, int m_, vector<int> x_, vector<int> y_, vector<int> w_)
{
    x = x_.data();
    y = y_.data();
    w = w_.data();
    n = n_, m = m_;

    if (count_if(x, x+m, [](int x){ return x%2; }) == 0) return accumulate(w, w+m, 0ll);
    if (*max_element(x, x+m) <= 1)
    {
        vector<vector<ll>> pf(2, vector<ll>(n+1));
        for (int i = 0; i < m; ++i) pf[x[i]][y[i]] += w[i];
        for (int i = 0; i < 2; ++i)
            for (int j = 1; j < n; ++j)
                pf[i][j] += pf[i][j-1];
        ll z = max(pf[0][n-1], pf[1][n-1]);
        if (n > 2)
        {
            for (int j = 0; j < n; ++j)
                z = max(z, pf[0][j] + pf[1][n-1] - pf[1][j]);
        }
        return z;
    }
    if (*max_element(y, y+m) == 0)
    {
        vector<ll> byx(n);
        for (int i = 0; i < m; ++i) byx[x[i]] += w[i];
        vector<vector<ll>> dp(n+2, vector<ll>(3));
        dp[0][0] = 0; dp[0][1] = byx[0]; dp[1][0] = dp[0][1]; dp[1][1] = byx[1]; dp[1][2] = byx[1];
        for (int i = 2; i < n; ++i)
        {
            dp[i][0] = max({dp[i-1][2], dp[i-1][1], dp[i-1][0]});
            dp[i][1] = dp[i-1][0] + byx[i];
            dp[i][2] = dp[i-1][1] + byx[i];
        }
        return max(dp[n-1][0], dp[n-1][1]);
    }
    if (n <= 300 && *max_element(y, y+m) <= 8)
    {
        ll dp[301][9][3]{0};
        ll pf[301][9]{0};
        for (int i = 0; i < m; ++i) pf[x[i]][y[i]] += w[i];
        for (int i = 0; i < n; ++i) for (int j = 1; j < 9; ++j) pf[i][j] += pf[i][j-1];

        for (int j = 0; j < 9; ++j)
            dp[0][j][0] = 0;
        for (int j = 0; j < 9; ++j)
            dp[1][j][0] = pf[0][j],
            dp[1][j][1] = pf[1][j];

    }
    if (n <= 300)
    {

    }

    return 0;
}


Compilation message (stderr)

fish.cpp: In function 'long long int max_weights(int, int, std::vector<int>, std::vector<int>, std::vector<int>)':
fish.cpp:60:12: warning: variable 'dp' set but not used [-Wunused-but-set-variable]
   60 |         ll dp[301][9][3]{0};
      |            ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...