Submission #1272365

#TimeUsernameProblemLanguageResultExecution timeMemory
1272365tatas07Zemljište (COCI22_zemljiste)C++20
30 / 70
2095 ms4156 KiB
#include <bits/stdc++.h>
using namespace std;

long long a, b;

long long jarak(long long x) {
    if (x < a) {
        return (a + b) - 2 * x;
    } else if (x > b) {
        return 2 * x - (a + b);
    } else {
        return b - a;
    }
}
int main() {
    long long r, s;
    cin >> r >> s >> a >> b;
    if (a > b) swap(a, b);
    long long grid[r + 1][s + 1];
    for (long long i = 1; i <= r; i++) {
        for (long long j = 1; j <= s; j++) {
            cin >> grid[i][j];
        }
    }
    vector<vector<long long>> ps(r + 1, vector<long long>(s + 1, 0));
    for (long long i = 1; i <= r; i++) {
        for (long long j = 1; j <= s; j++) {
            ps[i][j] = ps[i - 1][j] + grid[i][j];
        }
    }
    long long ans = LLONG_MAX;
    for (long long atas = 1; atas <= r; atas++) {
        for (long long bawah = atas; bawah <= r; bawah++) {
            vector<long long> kolom(s + 1, 0);
            for (long long j = 1; j <= s; j++) {
                kolom[j] = ps[bawah][j] - ps[atas - 1][j];
            }
            multiset<long long> st;
            long long pref = 0;
            st.insert(0);
            for (long long j = 1; j <= s; j++) {
                pref += kolom[j];
                long long low = pref - b;
                auto it = st.lower_bound(low);
                if (it != st.end()) {
                    long long sub = pref - *it;
                    if (sub >= a && sub <= b) {
                        cout << (b - a) << "\n";
                        return 0;
                    }
                    ans = min(ans, jarak(sub));
                }
                if (it != st.begin()) {
                    auto it2 = it;
                    --it2;
                    long long sub = pref - *it2;
                    if (sub >= a && sub <= b) {
                        cout << (b - a) <<endl;
                        return 0;
                    }
                    ans = min(ans,jarak(sub));
                }
                st.insert(pref);
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...