제출 #858747

#제출 시각아이디문제언어결과실행 시간메모리
858747sleepntsheep메기 농장 (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...