제출 #1156220

#제출 시각아이디문제언어결과실행 시간메모리
1156220mochaThe Kingdom of JOIOI (JOI17_joioi)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; const int mx = 2e3+5; const int inf = 1e9+5; int n, m; int a[mx][mx]; int b[mx][mx]; int mn = inf, ma = 0; int IOI, JOI; bool check1(int x) { int pre = n; for (int i=1;i<=n;i++) { int mn = m+1; int ma = 0; for (int j=1;j<=m;j++) { if (abs(IOI-a[i][j]) > x) ma = max(ma, j); if (abs(JOI-a[i][j]) > x) mn = min(mn, j); } if (mn < ma or ma > pre) return 0; pre = min(pre, mn-1); } return true; } bool check2(int x) { int pre = n; for (int i=1;i<=n;i++) { int mn = m+1; int ma = 0; for (int j=1;j<=m;j++) { if (abs(IOI-b[i][j]) > x) ma = max(ma, j); if (abs(JOI-b[i][j]) > x) mn = min(mn, j); } if (mn < ma or ma > pre) return 0; pre = min(pre, mn-1); } return true; } signed main() { cin >> n >> m; for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { cin >> a[i][j]; mn = min(mn, a[i][j]); ma = max(ma, a[i][j]); b[n-i+1][j] = a[i][j]; } } IOI = ma; JOI = mn; int l = (ma+mn)/2+((ma+mn)%2!=0), r = ma - mn; while (l < r) { int m = l + r >> 1; if (check1(m) or check2(m)) { r = m; } else { l = m+1; } } int ans = l; { IOI = mn; JOI = ma; int l = (ma+mn)/2+((ma+mn)%2!=0), r = ma - mn; while (l < r) { int m = l + r >> 1; if (check1(m) or check2(m)) { r = m; } else { l = m+1; } } ans = min(ans, l); } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...