Cod sursa(job #964603)

Utilizator misinozzz zzz misino Data 21 iunie 2013 18:03:05
Problema Zone Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("zone.in");
ofstream g("zone.out");
int n,i,j,k,p,x;
long long a[520][520],c[10];
bool viz[10];
inline int exista(long long x)
{
    for(int i=1;i<=9;++i)
    if(!viz[i]&&c[i]==x)
    return i;
    return 0;
}
inline long long calcul(int x11,int y11,int x2,int y2)
{
    return a[x2][y2]+a[x11][y11]-a[x2][y11]-a[x11][y2];
}
inline bool verif(int aa,int b,int cc,int d)
{
    int x,l[4],c[4];
    l[0]=c[0]=0;
    l[1]=aa;
    l[2]=b;
    c[1]=cc;
    c[2]=d;
    l[3]=c[3]=n;
    for(int i=1;i<=3;++i)
    for(int j=1;j<=3;++j)
    {
        long long v=calcul(l[i-1],c[j-1],l[i],c[j]);
        x=exista(v);
        if(!x||viz[x])
        return 0;
        viz[x]=1;
    }
    return 1;
}
int main()
{
    f>>n;
    for(i=1;i<=9;++i)
    f>>c[i];
    for(i=1;i<=n;++i)
    for(j=1;j<=n;++j)
    {
        f>>x;
        a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+x;
    }
    for(i=1;i<n;++i)
    for(j=1;j<n;++j)
    if(exista(a[i][j]))
    for(k=i+1;k<n;++k)
    for(p=j+1;p<n;++p)
    {
        memset(viz,0,sizeof(viz));
        if(verif(i,k,j,p))
        {
            g<<i<<' '<<k<<' '<<j<<' '<<p<<'\n';
            return 0;
        }
    }
    return 0;
}