Cod sursa(job #2513608)

Utilizator bluestorm57Vasile T bluestorm57 Data 23 decembrie 2019 15:19:41
Problema Zone Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.95 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("zone.in");
ofstream g("zone.out");

const int NMAX = 600;
const int SMAX = 10;
long long n,mat[NMAX][NMAX],sum[SMAX], mats[NMAX][NMAX], used[SMAX];
vector < pair < int, int > > v;

inline bool available(long long s){
    for(int i = 1 ; i <= 9 ; i++)
        if(sum[i] == s && !used[i]){
            used[i] = 1;
            return 1;
        }
    return 0;
}

inline int SUM(const int &is, const int &js, const int &ij, const int &jj){
    return available(mats[ij][jj] - mats[is-1][jj] - mats[ij][js-1] + mats[is-1][js-1]);
}

int main(){
    int i,j;
    int ij,jj,is,js;

    f >> n;

    for(i = 1 ; i <= 9 ; i++)
        f >> sum[i];

    for(i = 1 ; i <= n ; i++)
        for(j = 1 ; j <= n ; j++){
            f >> mat[i][j];
            mats[i][j] = mats[i - 1][j] + mats[i][j - 1] - mats[i - 1][j - 1] + mat[i][j];
        }

    for(i = 1 ; i < n ; i++)
        for(j = i + 1 ; j < n ; j++)
            v.push_back(make_pair(i,j));

    for(auto it: v)
        for(auto its: v){
            memset(used, 0, sizeof(used));

            ///1
            is = js = 1;
            ij = it.first;
            jj = its.first;

            if(!SUM(is,js,ij,jj))
                continue;

            ///2
            is = 1;
            js = its.first + 1;
            ij = it.first;
            jj = its.second;

            if(!SUM(is,js,ij,jj))
                continue;

            ///3
            is = 1;
            js = its.second + 1;
            ij = it.first;
            jj = n;

            if(!SUM(is,js,ij,jj))
                continue;

            ///4
            is = it.first + 1;
            js = 1;
            ij = it.second;
            jj = its.first;

            if(!SUM(is,js,ij,jj))
                continue;

            ///5
            is = it.first + 1;
            js = its.first + 1;
            ij = it.second;
            jj = its.second;

            if(!SUM(is,js,ij,jj))
                continue;

            ///6
            is = it.first + 1;
            js = its.second + 1;
            ij = it.second;
            jj = n;

            if(!SUM(is,js,ij,jj))
                continue;

            ///7
            is = it.second + 1;
            js = 1;
            ij = n;
            jj = its.first;

            if(!SUM(is,js,ij,jj))
                continue;

            ///8
            is = it.second + 1;
            js = its.first + 1;
            ij = n;
            jj = its.second;

            if(!SUM(is,js,ij,jj))
                continue;

            ///9
            is = it.second + 1;
            js = its.second + 1;
            ij = n;
            jj = n;

            if(!SUM(is,js,ij,jj))
                continue;

            g << it.first << " " << it.second << " " << its.first << " " << its.second;
            return 0;
        }

    return 0;
}