Cod sursa(job #2059199)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 6 noiembrie 2017 19:27:14
Problema Zone Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <bits/stdc++.h>
#define Nmax 513
#define DIM 70000
#define ll long long
#define F(i,lim,n) for(i=lim;i<n;i++)
using namespace std;
ll a[Nmax][Nmax];
int cursor=DIM-1;
char buffer[DIM];
void read(ll &x)
{
    x=0;
    while(!isdigit(buffer[cursor]))
        if(++cursor==DIM)
        {
            cursor=0;
            fread(buffer,1,DIM,stdin);
        }
    while(isdigit(buffer[cursor]))
    {
        x=x*10+buffer[cursor]-'0';
        if(++cursor==DIM)
        {
            cursor=0;
            fread(buffer,1,DIM,stdin);
        }
    }
}
ll val[10];
ll n;
ll L[5],C[5];
int x,y;
map <ll,bool> M;
inline bool valid()
{
    M.clear();
    F(x,1,4)
        F(y,1,4)
        M[a[L[x]][C[y]]-a[L[x-1]][C[y]]-a[L[x]][C[y-1]]+a[L[x-1]][C[y-1]]]=true;
    F(x,1,10)
        if(!M[val[x]]) return false;
    return true;
}
int main()
{
    freopen("zone.in","r",stdin);
    freopen("zone.out","w",stdout);
    ll i,j;
    read(n);
    for(i=1;i<=9;i++)
        read(val[i]);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            read(a[i][j]);
            a[i][j]+=(a[i-1][j]+a[i][j-1]-a[i-1][j-1]);
        }
    L[3]=C[3]=n;
    F(L[1],1,n-1)
        F(L[2],L[1]+1,n)
            F(C[1],1,n-1)
                F(C[2],C[1]+1,n)
                    if(valid())
                    {
                        printf("%d ",L[1]);
                        printf("%d ",L[2]);
                        printf("%d ",C[1]);
                        printf("%d ",C[2]);
                        return 0;
                    }

    return 0;
}