제출 #1305013

#제출 시각아이디문제언어결과실행 시간메모리
1305013sqwiijqkThe Kingdom of JOIOI (JOI17_joioi)C++20
60 / 100
4097 ms119720 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; # define int long long const int MOD = 1e9 + 7; const int INF = 1e18; 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(); } } int dist(int a, int b) { return abs(a - b); } int get(vector<vector<int>> &a, vector<vector<int>> &color, int c) { int mn = INF, mx = -INF; for (int i = 0; i < a.size(); i++) { for (int j = 0; j < a[i].size(); j++) { if (color[i][j] == c) { mn = min(mn, a[i][j]); mx = max(mx, a[i][j]); } } } if (mx == -INF) return 0; return mx - mn; } 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]; } } a = b; } 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 f = get(a, color, 1); int s = get(a, color, 2); if (max(f, s) <= x) { flag = true; } 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]; } } int l = -1, r = INF; while (r - l > 1) { int mid = (l + r) / 2; 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...