제출 #1305015

#제출 시각아이디문제언어결과실행 시간메모리
1305015sqwiijqkThe Kingdom of JOIOI (JOI17_joioi)C++20
100 / 100
2920 ms63388 KiB
#include <bits/stdc++.h> #include <experimental/random> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; void solve1(); using ll = long long; using ull = unsigned long long; using ld = double; using BIG = __int128_t; const int MOD = 1e9 + 7; const int INF = 1e9; signed main() { #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int qwerty = 1; // cin >> qwerty; while (qwerty--) { solve1(); } } void go_next(vector<vector<int>> &a) { int n = a.size(); int m = a[0].size(); vector<vector<int>> b(m, vector<int>(n)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { b[j][n - i - 1] = a[i][j]; } } swap(a, b); } vector<vector<int>> qqq; bool check(vector<vector<int>> &a, int x) { bool flag = false; for (int ZZZ = 0; ZZZ < 4; ZZZ++) { int n = a.size(); int m = a[0].size(); int mx = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { mx = max(mx, a[i][j]); } } vector<vector<int>> color(n, vector<int>(m, 2)); int mn_i = m - 1; for (int i = 0; i < n; i++) { int now = -1; for (int j = 0; j <= mn_i; j++) { if (mx - a[i][j] > x) break; color[i][j] = 1; now = j; } mn_i = now; } int mn1 = INF, mx1 = 0, mn2 = INF, mx2 = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (color[i][j] == 1) { mn1 = min(mn1, a[i][j]); mx1 = max(mx1, a[i][j]); } else { mn2 = min(mn2, a[i][j]); mx2 = max(mx2, a[i][j]); } } } int fir = mx1 - mn1; int sec = mx2 - mn2; if (mx1 == INF) fir = 0; if (mx2 == INF) sec = 0; if (max(fir, sec) <= x) { flag = true; break; } go_next(a); } return flag; } void solve1() { int n, m; cin >> n >> m; vector<vector<int>> a(n, vector<int>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; } } qqq = a; int l = -1, r = 2 * INF; while (r - l > 1) { int mid = (l + r) / 2; a = qqq; if (check(a, mid)) { r = mid; } else { l = mid; } } cout << r; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...