#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int r, s, pp, qq;
cin>>r>>s>>pp>>qq;
int p = min(pp,qq);
int q = max(pp,qq);
int ans = INT_MAX;
vector<vector<int> > arr(r+1, vector<int>(s+1));
for(int a=1; a<=r; a++)
{
for(int b=1; b<=s; b++)
{
cin>>arr[a][b];
ans = min(ans, abs(p - arr[a][b]) + abs(q - arr[a][b]));
}
}
vector<vector<int> > pref(r+1, vector<int>(s+1, 0));
for(int a=1; a<=s; a++)
{
for(int b=1; b<=r; b++)
{
pref[b][a] = pref[b-1][a] + arr[b][a];
}
}
for(int a=1; a<=r; a++)
{
for(int b=1; b<=s; b++)
{
//cout<<pref[a][b]<<" ";
}
//cout<<endl;
}
for(int a=1; a<=r; a++)
{
for(int b=a; b<=r; b++)
{
//cout<<a<<" "<<b<<endl;
vector<int> temp(s+2, 0);
for(int c=1; c<=s; c++)
{
temp[c] = pref[b][c] - pref[a-1][c];
//cout<<temp[c]<<" ";
}
vector<long long> pref1(s+1, 0);
for (int c = 1; c <= s; c++)
{
pref1[c] = pref1[c-1] + temp[c];
}
//cout<<endl;
set<long long> seen;
seen.insert(0);
for (int c = 1; c <= s; c++)
{
long long cur = pref1[c];
for (long long target : {cur - p, cur - q})
{
auto it = seen.lower_bound(target);
if (it != seen.end())
{
long long cand = cur - *it;
ans = min(ans, abs(cand - p) + abs(cand - q));
}
if (it != seen.begin())
{
--it;
long long cand = cur - *it;
ans = min(ans, abs(cand - p) + abs(cand - q));
}
}
seen.insert(cur);
}
}
}
cout<<ans<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |