Cod sursa(job #2477239)

Utilizator ValentinSavoiuFMI Savoiu Valentin-Marian ValentinSavoiu Data 19 octombrie 2019 21:05:23
Problema Zone Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <bits/stdc++.h>
#define pii pair<int, int>
#define pb push_back
#define mp make_pair
#define NMAX 7003
using namespace std;
ifstream f("zone.in");
ofstream g("zone.out");
int  N, M, K, a[515][515], y;
long long b[515][515], x;
vector<long long> myMap;
bool check (int i, int j, int ii, int jj) {
    vector <long long> v;
    v.pb(b[i][j]);
    v.pb(b[i][jj] - b[i][j]);
    v.pb(b[i][N] - b[i][jj]);
    v.pb(b[ii][j] - b[i][j]);
    v.pb(b[ii][jj] + b[i][j] - b[i][jj] - b[ii][j]);
    v.pb(b[ii][N] + b[i][jj] - b[ii][jj] - b[i][N]);
    v.pb(b[N][j] - b[ii][j]);
    v.pb(b[N][jj] - b[ii][jj] - b[N][j] + b[ii][j]);
    v.pb(b[N][N] + b[ii][jj] - b[N][ii] - b[jj][N]);
    sort(v.begin(), v.end());
    return v == myMap;
}
int main() {
    f >> N;
    for (int i = 0; i < 9; ++i) {
        f >> x;
        myMap.pb(x);
    }
    sort(myMap.begin(), myMap.end());
    for (int i = 1; i <= N; ++i)
        for (int j = 1; j <= N; ++j) {
            f >> a[i][j];
            b[i][j] = a[i][j] + b[i - 1][j] + b[i][j - 1] - b[i - 1][j - 1];
        }
    for (int i = 1; i < N; ++i)
        for (int j = 1; j < N; ++j) {
            if (binary_search(myMap.begin(), myMap.end(), b[i][j])) {
                //INTRU AICI DE MAX 9 ori
                for (int ii = i + 1; ii < N; ++ii)
                    for (int jj = j + 1; jj < N; ++jj) {
                        if (check(i, j, ii, jj)) {
                            g << i << ' ' << ii << ' ' << j << ' ' << jj;
                        }
                    }
            }
        }
    return 0;
}