Cod sursa(job #1401723)

Utilizator cypry97Dascalitei Ciprian cypry97 Data 26 martie 2015 08:51:34
Problema Zone Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("zone.in");
ofstream fout("zone.out");

int N,K;
int VAL[10];
int MAT[513][513];
int S[513][513];

void Citire()
{
    int i,j;
    fin>>N;
    for(i=1; i<=9; i++)
        fin>>VAL[i];
    for(i=1; i<=N; i++)
        for(j=1; j<=N; j++)
            fin>>MAT[i][j];
    sort(VAL+1,VAL+10);
}

void SumaPartiala()
{
    int i,j;
    for(i=1; i<=N; i++)
        for(j=1; j<=N; j++)
            S[i][j]=S[i-1][j]+S[i][j-1]-S[i-1][j-1]+MAT[i][j];
}

void Rezolvare()
{
    int l1,l2,c1,c2;
    int v[10],i;
    for(l1=1; l1<N; l1++)
        for(l2=l1+1; l2<=N; l2++)
            for(c1=1; c1<N; c1++)
                for(c2=c1+1; c2<=N; c2++)
                {
                    v[1]=S[l1][c1];
                    v[2]=S[l2][c1]-v[1];
                    v[3]=S[N][c1]-S[l2][c1];
                    v[4]=S[l1][c2]-S[l1][c1];
                    v[5]=S[l2][c2]-S[l2][c1]-S[l1][c2]+S[l1][c1];
                    v[6]=S[N][c2]-S[N][c1]-S[l2][c2]+S[l2][c1];
                    v[7]=S[l1][N]-S[l1][c2];
                    v[8]=S[l2][N]-S[l2][c2]-S[l1][N]+S[l1][c2];
                    v[9]=S[N][N]-S[N][c2]-S[l2][N]+S[l2][c2];
                    sort(v+1,v+10);
                    for(i=1;i<=9;i++)
                        if(VAL[i]!=v[i])
                            i=31;
                    if(i==10)
                    {
                        fout<<l1<<' '<<l2<<' '<<c1<<' '<<c2;
                        return ;
                    }
                }
}

int main()
{
    Citire();
    SumaPartiala();
    Rezolvare();
    /*int v[10];
    int l1=1,l2=3,c1=2,c2=3;
    v[1]=S[l1][c1];
    v[2]=S[l2][c1]-v[1];
    v[3]=S[N][c1]-S[l2][c1];
    v[4]=S[l1][c2]-S[l1][c1];
    v[5]=S[l2][c2]-S[l2][c1]-S[l1][c2]+S[l1][c1];
    v[6]=S[N][c2]-S[N][c1]-S[l2][c2]+S[l2][c1];
    v[7]=S[l1][N]-S[l1][c2];
    v[8]=S[l2][N]-S[l2][c2]-S[l1][N]+S[l1][c2];
    v[9]=S[N][N]-S[N][c2]-S[l2][N]+S[l2][c2];
    sort(v+1,v+10);
    cout<<"!";*/
    return 0;
}