Submission #1272933

#TimeUsernameProblemLanguageResultExecution timeMemory
1272933ken7236Zemljište (COCI22_zemljiste)C++20
0 / 70
0 ms332 KiB
#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;
            int maxsum = 0, minsum = LLONG_MAX;
            vector<int> temp(s+2, 0);
            for(int c=1; c<=s; c++)
            {
                temp[c] = pref[b][c] - pref[a-1][c];
                minsum = min(minsum, temp[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];
            }
            maxsum = pref1[s];
            //cout<<endl;
            if (maxsum >= p && minsum <= q) {
                // interval overlap, we can hit [p,q]
                ans = min(ans, q - p);
            } else {
                // take whichever extreme is closer
                ans = min(ans, min(
                    llabs(maxsum - p) + llabs(maxsum - q),
                    llabs(minsum - p) + llabs(minsum - q)
                ));
            }
        }
    }
    cout<<ans<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...