Submission #1091991

#TimeUsernameProblemLanguageResultExecution timeMemory
1091991alex2407UFO (IZhO14_ufo)C++17
5 / 100
2096 ms18460 KiB
#include <iostream>
#include <vector>

using namespace std;

vector<vector<long long> > a;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    long long n, m, r, k, p, hig, lin, cnt, maxi = 0;
    string nav;
    cin >> n >> m >> r >> k >> p;
    a.resize(n);
    for (int i = 0; i < n; i++) {
        a[i].resize(m);
        for (int j = 0; j < m; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 0; i < k; i++) {
        cnt = r;
        cin >> nav >> lin >> hig;
        lin--;
        if (nav == "S") {
            for (int j = n - 1; j >= 0 && cnt; j--) {
                if (a[j][lin] >= hig) {
                    a[j][lin]--;
                    cnt--;
                }
            }
        }
        if (nav == "N") {
            for (int j = 0; j < n && cnt; j++) {
                if (a[j][lin] >= hig) {
                    cnt--;
                    a[j][lin]--;
                }
            }
        }
        if (nav == "W") {
            for (int j = 0; j < m && cnt; j++) {
                if (a[lin][j] >= hig) {
                    a[lin][j]--;
                    cnt--;
                }
            }
        }
        if (nav == "E") {
            for (int j = m - 1; j >= 0 && cnt; j--) {
                if (a[lin][j] >= hig) {
                    cnt--;
                    a[lin][j]--;
                }
            }
        }
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (!(i) && !(j)) {
                continue;
            } else if (!(i)) {
                a[i][j] += a[i][j - 1];
            } else if (!(j)) {
                a[i][j] += a[i - 1][j];
            } else {
                a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
            }
        }
    }
    for (int i = p - 1; i < n; i++) {
        for (int j = p - 1; j < m; j++) {
            if (i == p - 1 && j == p - 1) {
                maxi = max(maxi, a[i][j]);
            } else if (i == p - 1) {
                maxi = max(maxi, a[i][j] - a[i][j - p]);
            } else if (j == p - 1) {
                maxi = max(maxi, a[i][j] - a[i][j - p]);
            } else {
                maxi = max(maxi, a[i][j] - a[i - p][j] - a[i][j - p] + a[i - p][j - p]);
            }
        }
    }
    cout << maxi << endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...