제출 #1211462

#제출 시각아이디문제언어결과실행 시간메모리
1211462dima2101The Kingdom of JOIOI (JOI17_joioi)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #define int long long struct Node { int i, j; int num; Node(int i, int j, int num) : i(i), j(j), num(num) {}; Node() = default; }; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(0); int h, w; std::cin >> h >> w; std::vector<std::vector<int>> a(h, std::vector<int>(w)); std::vector<Node> all; for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { std::cin >> a[i][j]; all.push_back(Node(i, j, a[i][j])); } } std::sort(all.begin(), all.end(), [&](Node a, Node b) { return a.num < b.num; }); int l = -1, r = 1e9; while (l + 1 < r) { int mid = (l + r) / 2; int left = -1; int right = 1e9; for (int i = 0; i < all.size(); i++) { if (all[i].num - all[0].num <= mid) { left = i; } if (all.back().num - all[i].num <= mid) { right = std::min(right, i); } } left++; right--; if (left <= right) { l = mid; continue; } std::vector<std::vector<char>> help(h, std::vector<char>(w, '#')); for (int i = 0; i <= right; i++) { help[all[i].i][all[i].j] = 'I'; } for (int i = left; i < all.size(); i++) { help[all[i].i][all[i].j] = 'J'; } bool can = true; for (int i = 0; i < h; i++) { std::string now; char prev = '#'; for (int j = 0; j < w; j++) { if (help[i][j] == '#') { continue; } if (prev != help[i][j]) { now += help[i][j]; prev = help[i][j]; } } if (now.size() > 2) { can = false; } } for (int j = 0; j < w; j++) { std::string now; char prev = '#'; for (int i = 0; i < h; i++) { if (help[i][j] == '#') { continue; } if (prev != help[i][j]) { now += help[i][j]; prev = help[i][j]; } } if (now.size() > 2) { can = false; } } if (can) { r = mid; } else { l = mid; } } std::cout << r; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...