Cod sursa(job #2478157)

Utilizator marian013Giugioiu Marian Constantin marian013 Data 21 octombrie 2019 18:34:25
Problema Zone Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("zone.in");
ofstream g("zone.out");
int n,l1,l2,c1,c2;
long long v[10],u[10],s[515][515];
int cauta(long long x)
{
    for(int i=1;i<=9;i++)
        if(v[i]==x)
            return 1;
    return 0;
}
int cauta1()
{
    for(int i=1;i<=9;i++)
        if(v[i]!=u[i])
            return 0;
    return 1;
}
long long sum(int x1,int y1,int x2,int y2)
{
    return s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1];
}
int main()
{
    f>>n;
    for(int i=1;i<=9;i++) f>>v[i];
    sort(v+1,v+10);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++){
        int x;
        f>>x;
        s[i][j]=s[i-1][j]+s[i][j-1]+x-s[i-1][j-1];
    }
    for(l1=1;l1<n-1;l1++)
    for(c1=1;c1<n-1;c1++){
        if(cauta(s[l1][c1]))
            for(l2=l1+1;l2<=n-1;l2++)
                if(cauta(s[l2][c1]-s[l1][c1]))
                for(c2=c1+1;c2<=n-1;c2++)
                if(cauta(s[l1][c2]-s[l1][c1]))
        {
            u[1]=sum(1,1,l1,c1);
            u[2]=sum(1,c1+1,l1,c2);
            u[3]=sum(1,c2+1,l1,n);
            u[4]=sum(l1+1,1,l2,c1);
            u[5]=sum(l1+1,c1+1,l2,c2);
            u[6]=sum(l1+1,c2+1,l2,n);
            u[7]=sum(l2+1,1,n,c1);
            u[8]=sum(l2+1,c1+1,n,c2);
            u[9]=sum(l2+1,c2+1,n,n);
            sort(u+1,u+10);
            if(cauta1()){g<<l1<<" "<<l2<<" "<<c1<<" "<<c2;return 0;}
        }
    }
}