Cod sursa(job #1159326)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 29 martie 2014 15:08:44
Problema Zone Scor 100
Compilator cpp Status done
Runda sambata_duminica Marime 2 kb
#include <cstdio>
#include <algorithm>
using namespace std;
long long i, j, n, o, l1, l2, c1, c2;
long long w[45], v[45], a[520][520], b[520][520];
bool ok(long long x)
{
    int i;
    for(i=1;i<=9;i++)
        if(v[i]==x) return 1;
    return 0;
}
int main()
{
    freopen("zone.in", "r", stdin);
    freopen("zone.out", "w", stdout);
    scanf("%lld", &n);
    for(i=1;i<=9;i++)
        scanf("%lld", &v[i]);
    sort(v+1,v+10);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            scanf("%lld", &a[i][j]);
            b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j];
        }
    for(l1=1;l1<=n;l1++)
        for(c1=1;c1<=n;c1++)
            if(ok(b[l1][c1])==1)
                for(l2=l1+1;l2<=n;l2++)
                    if(ok(b[l2][c1]-b[l1][c1])==1)
                        for(c2=c1+1;c2<=n;c2++)
                        {
                            w[1]=b[l1][c1];
                            w[2]=b[l2][c1]-b[l1][c1];
                            w[3]=b[n][c1]-b[l2][c1];
                            w[4]=b[l1][c2]-b[l1][c1];
                            w[5]=b[l2][c2]-b[l1][c2]-b[l2][c1]+b[l1][c1];
                            w[6]=b[n][c2]-b[l2][c2]-b[n][c1]+b[l2][c1];
                            w[7]=b[l1][n]-b[l1][c2];
                            w[8]=b[l2][n]-b[l1][n]-b[l2][c2]+b[l1][c2];
                            w[9]=b[n][n]-b[n][c2]-b[l2][n]+b[l2][c2];

                            sort(w+1,w+10);

                            o=1;
                            for(i=1;i<=9;i++)
                                if(w[i]!=v[i])
                                {
                                    o=0;
                                    break;
                                }
                            if(o==1)
                            {
                                printf("%lld %lld %lld %lld\n", l1, l2, c1, c2);
                                return 0;
                            }
                        }

    return 0;
}