求助
查看原帖
求助
875897
lucktains楼主2024/6/12 16:30

记录

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, a, b, ar[511][511], sans = LLONG_MAX;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m >> a >> b;
    if (a > b)
        swap(a, b);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> ar[i][j];
            ar[i][j] += ar[i - 1][j] + ar[i][j - 1] - ar[i - 1][j - 1];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            int l = i, r = n, ans = LLONG_MAX, cm = 0;
            while (l <= r) {
                int mid = l + r >> 1, cmp;
                int l1 = j, r1 = m;
                while (l1 <= r1) {
                    int mid1 = l1 + r1 >> 1;
                    int x = ar[mid][mid1] - ar[mid][j - 1] - ar[i - 1][mid1] + ar[i - 1][j - 1];
                    ans = min(ans, abs(x - a) + abs(x - b));
                    if (x < a) {
                        l1 = mid1 + 1;
                        cmp = 1;
                    } else if (x > b) {
                        r1 = mid1 - 1;
                        cmp = 2;
                    } else {
                        // ans = min(ans, b - a);
                        cmp = 3;
                        break;
                    }
                }
                if (cmp == 1) {
                    l = mid + 1;
                } else if (cmp == 2) {
                    r = mid - 1;
                } else {
                    cm = 1;
                    break;
                }
            }
            sans = min(sans, ans);
            if (cm) {
                cout << sans;
                return 0;
            }
        }
    }
    cout << sans;
    return 0;
}
2024/6/12 16:30
加载中...