제출 #626378

#제출 시각아이디문제언어결과실행 시간메모리
626378boris_mihov메기 농장 (IOI22_fish)C++17
9 / 100
104 ms10868 KiB
#include "fish.h" #include <algorithm> #include <iostream> #include <cassert> #include <numeric> #include <vector> typedef long long llong; const int MAXM = 300000 + 10; const int MAXN = 3000 + 10; const llong INF = 1e18; int n, m; struct Fish { int x, y, w; inline friend bool operator < (const Fish &a, const Fish &b) { return a.x < b.x || (a.x == b.x && a.y < b.y); } } fish[MAXM]; llong solveOdd() { llong ans = 0; for (int i = 1 ; i <= m ; ++i) { ans += fish[i].w; } return ans; } llong solveX12() { llong sum[2]; sum[0] = sum[1] = 0; for (int i = 1 ; i <= m ; ++i) { --fish[i].x; sum[fish[i].x] += fish[i].w; } if (n == 2) { return std::max(sum[0], sum[1]); } std::sort(fish+1, fish+1+m); int ptr0 = 1; int ptr1 = 1; while (ptr1 <= m && fish[ptr1].x == 0) ptr1++; if (ptr1 == m+1) return sum[0]; sum[0] = 0; llong ans = sum[1]; while (ptr0 <= m && fish[ptr0].x == 0) { sum[0] += fish[ptr0].w; while (ptr1 <= m && fish[ptr1].y <= fish[ptr0].y) { sum[1] -= fish[ptr1].w; ++ptr1; } ans = std::max(ans, sum[0] + sum[1]); ptr0++; } return ans; } llong dp2[MAXM][2][2]; llong solveY1() { llong ans = 0; std::sort(fish+1, fish+1+m); fish[0].x = -1; dp2[0][1][0] = -INF; for (int i = 1 ; i <= m ; ++i) { dp2[i][0][0] = std::max(dp2[i-1][0][0], dp2[i-1][1][0] + fish[i].w); dp2[i][1][0] = std::max(dp2[i-1][0][1], dp2[i-1][1][1]); dp2[i][0][1] = std::max(dp2[i-1][0][0], dp2[i-1][1][0]) + fish[i].w; dp2[i][1][1] = std::max(dp2[i-1][0][1], dp2[i-1][1][1]); if (fish[i].x != fish[i-1].x + 1 && fish[i].x >= 2) { dp2[i][0][0] = std::max(dp2[i][0][0], dp2[i-1][0][0] + fish[i].w); } } return std::max(dp2[m][0][0], dp2[m][1][0]); } llong solveNSmall() { llong ans = 0; return ans; } llong max_weights(int N, int M, std::vector <int> X, std::vector <int> Y, std::vector <int> W) { n = N; m = M; bool isOdd = true; bool isX01 = true; bool isY0 = true; for (int i = 1 ; i <= m ; ++i) { ++X[i-1]; ++Y[i-1]; fish[i].x = X[i-1]; fish[i].y = Y[i-1]; fish[i].w = W[i-1]; isOdd &= (fish[i].x &1); isX01 &= (fish[i].x <= 2); isY0 &= (fish[i].y == 1); } if (isOdd) return solveOdd(); if (isX01) return solveX12(); if (isY0) return solveY1(); return solveNSmall(); }

컴파일 시 표준 에러 (stderr) 메시지

fish.cpp: In function 'llong solveY1()':
fish.cpp:78:11: warning: unused variable 'ans' [-Wunused-variable]
   78 |     llong ans = 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...