# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1201420 | Timosh | Catfish Farm (IOI22_fish) | C++20 | 0 ms | 0 KiB |
#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W)
{
bool ok = 1;
for (auto &i : X)
ok &= (i % 2 == 0);
if (ok)
return accumulate(W.begin(), W.end(), 0ll);
if (*max_element(X.begin(), X.end()) <= 1)
{
vector<int> A(N), B(N);
for (int i = 0; i < N; i++)
{
if (X[i])
B[Y[i]] = W[i];
else
A[Y[i]] = W[i];
}
vector<long long> pref(N + 1);
for (int i = 0; i < N; i++)
pref[i + 1] = pref[i] + A[i];
long long mx = pref[N], s = 0;
for (int i = N - 1; i >= 0; i--)
{
s += B[i];
mx = max(mx, s + pref[i]);
}
s = 0;
for (int i = 0; i < N; i++)
{
s += B[i];
mx = max(mx, s + pref[n] - pref[i + 1]);
}
return mx;
}
return 0;
}