제출 #858747

#제출 시각아이디문제언어결과실행 시간메모리
858747sleepntsheepCatfish Farm (IOI22_fish)C++17
18 / 100
65 ms10952 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)
    {
    }

    return 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...