Submission #672999

#TimeUsernameProblemLanguageResultExecution timeMemory
672999pls33Catfish Farm (IOI22_fish)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #ifdef ONLINE_JUDGE #include "fish.h" #endif using namespace std; #pragma region dalykai using p32 = pair<int, int>; using p32u = pair<uint32_t, uint32_t>; using p64 = pair<int64_t, int64_t>; using p64u = pair<uint64_t, uint64_t>; using vi16 = vector<int16_t>; using vi16u = vector<uint16_t>; using vi32 = vector<int>; using vi32u = vector<uint32_t>; using vi64 = vector<int64_t>; using vi64u = vector<uint64_t>; using vp32 = vector<p32>; using vp32u = vector<p32u>; using vp64 = vector<p64>; using vp64u = vector<p64u>; using vvi32 = vector<vi32>; using vvi32u = vector<vi32u>; using vvi64 = vector<vi64>; using vvi64u = vector<vi64u>; using vvp32 = vector<vp32>; using vvp32u = vector<vp32u>; using vvp64 = vector<vp64>; using vvp64u = vector<vp64u>; #pragma endregion void update(int64_t val, p32 fish, vvi64 &vect) { vect[fish.first][fish.second] = max(vect[fish.first][fish.second], val); } int64_t weight_sum(int i, int j, vvi64 &prefix, int row) { if (i == -1) { return 0; } int64_t sum = prefix[row][j]; if (i) { sum -= prefix[row][i - 1]; } return sum; } int64_t new_weight(p32 lhs, p32 rhs, vvi64 &prefix){ long left = rhs.first > 0 ? weight_sum(0, rhs.second, prefix, rhs.first - 1) : 0; long right = (rhs.first + 1 < prefix.size()) ? weight_sum(0, rhs.second, prefix, rhs.first + 1) : 0; if (lhs.first == -1) { return left + right; } if (rhs.first - lhs.first > 2) { return left + right; } if (rhs.first - lhs.first == 2) { if (lhs.second >= rhs.second) { return right; } left -= weight_sum(0, lhs.second, prefix, rhs.first - 1); return left + right; } if (lhs.second > rhs.second) { left = -weight_sum(0, rhs.second, prefix, rhs.first); return left + right; } left -= weight_sum(0, lhs.second, prefix, rhs.first) + weight_sum(0, lhs.second, prefix, rhs.first - 1); return left + right; } long long max_weights(int N, int M, std::vector<int> X, std::vector<int> Y, std::vector<int> W) { vp32 fish; vvi64 prefix(N, vi64(N)); int max_y = 0; for (int i = 0; i < M; i++) { max_y = max(max_y, Y[i]); prefix[X[i]][Y[i]] = W[i]; if (X[i]) { fish.push_back({X[i] - 1, Y[i]}); } if (X[i] < N - 1) { fish.push_back({X[i] + 1, Y[i]}); } } max_y++; for (auto &row : prefix) { for (int i = 1; i < (int)row.size(); i++) { row[i] += row[i - 1]; } } sort(fish.begin(), fish.end()); auto it = unique(fish.begin(), fish.end()); fish.erase(it, fish.end()); vvi64 decrease(N, vi64(max_y + 1)); vvi64 increase = decrease; for (auto &f : fish) { int64_t initial = new_weight(p32(-1, -1), f, prefix); update(initial, f, increase); update(initial, f, decrease); for(int i = 0; i < f.first; i++){ for (int j = 0; j < N; j++) { int64_t prev = new_weight(p32(i, j), f, prefix); if(i == f.first - 1){ if(j < f.second){ update(prev + increase[i][j], f, increase); } else { update(prev + decrease[i][j], f, decrease); } } else { prev += max(increase[i][j], decrease[i][j]); update(prev, f, increase); update(prev, f, decrease); } } } } int64_t res = 0; for (int i = 0; i < (int)increase.size(); i++) { for (int j = 0; j < (int)increase[0].size(); j++) { res = max({res, increase[i][j], decrease[i][j]}); } } return res; } #ifndef ONLINE_JUDGE int main(int argc, char** argv) { int N, M; cin >> N >> M; std::vector<int> X(M), Y(M), W(M); for (int i = 0; i < M; ++i) { cin >> X[i] >> Y[i] >> W[i]; } long long result = max_weights(N, M, X, Y, W); cout << result << '\n'; return 0; } #endif

Compilation message (stderr)

fish.cpp:6: warning: ignoring '#pragma region dalykai' [-Wunknown-pragmas]
    6 | #pragma region dalykai
      | 
fish.cpp:29: warning: ignoring '#pragma endregion ' [-Wunknown-pragmas]
   29 | #pragma endregion
      | 
fish.cpp: In function 'int64_t new_weight(p32, p32, vvi64&)':
fish.cpp:57:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     long right = (rhs.first + 1 < prefix.size())
      |                   ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccCQMpoA.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccHIYOkz.o:fish.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status