Submission #1272076

#TimeUsernameProblemLanguageResultExecution timeMemory
1272076oswaldzzZemljište (COCI22_zemljiste)C++20
70 / 70
1235 ms4404 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define nl endl #define hehe ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); const int mod = 1e9+7; const int M = 2e5+5; int g[505][505] = {}; int pf[505][505] = {}; int binser(const vector<int>& v, int x) { int l = 0, r = v.size(); while (l < r){ int mid = (l + r)/2; if (v[mid] < x) l = mid + 1; else r = mid; } return l; } void solve(){ int n,m; cin >> n >> m; int a,b; cin >> a >> b; for(int i = 1; i<=n; i++){ for(int j = 1; j<=m; j++){ cin >> g[i][j]; } } for(int i = 1; i<=n; i++){ for(int j = 1; j<=m; j++){ pf[i][j] = g[i][j]; if(i > 1) pf[i][j] += pf[i-1][j]; if(j > 1) pf[i][j] += pf[i][j-1]; if(i > 1 && j > 1) pf[i][j] -= pf[i-1][j-1]; } } int l = min(a,b); int r = max(a,b); int ans = LLONG_MAX; int tmp = r-l; int sumcol[505]; for(int i = 1; i <= n; i++){ for(int k = 1; k <= m; k++) sumcol[k] = 0; for(int j = i; j <= n; j++){ for(int k = 1; k<=m; k++) sumcol[k] += g[j][k]; vector<int> pref; pref.push_back(0); int prefix = 0; for(int k = 1; k <= m; k++){ prefix += sumcol[k]; int low = prefix - r; int high = prefix - l; int idx = binser(pref, low); if(idx < pref.size() && pref[idx] <= high){ cout << tmp << nl; return; } if(idx < pref.size()){ int s = prefix - pref[idx]; int dist = abs(s - a) + abs(s - b); ans = min(dist, ans); } if(idx > 0){ int s = prefix - pref[idx-1]; int dist = abs(s - a) + abs(s - b); ans = min(dist, ans); } int t = binser(pref, prefix); pref.insert(pref.begin() + t, prefix); } } } cout << ans << nl; } signed main(){ hehe int t = 1; while(t--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...