Cod sursa(job #1383124)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 9 martie 2015 21:55:38
Problema Zone Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.67 kb
#include <fstream>
#include <map>
#include <algorithm>
using namespace std;
ifstream fin("zone.in");
ofstream fout("zone.out");
map<int,int> m;
long long int a,b,i,n,v[520][520],j,i2,j2,r[10],l;
long long int suma(int a,int b,int c,int d)
{
    return v[a][b]+v[c][d]-v[a][d]-v[c][b];
}
void back()
{
    for(i=1;i<n-1;i++)
        for(j=1,r[1]=suma(i,j,0,0);j<n-1;j++,r[1]=suma(i,j,0,0))
            if(m[suma(i,j,0,0)])
            for(i2=i+1;i2<n;i2++)
            {
                r[7]=suma(n,j,i2,0);
                r[4]=suma(i2,j,i,0);
                if(m[r[4]]&&m[r[7]])
                for(j2=j+1;j2<n;j2++)
                {
                    m[r[1]]--;
                    m[r[4]]--;
                    m[r[7]]--;
                    r[2]=suma(i,j2,0,j);
                    if(m[r[2]])
                        m[r[2]]--;
                    else
                    {
                        m[r[1]]++;
                        m[r[4]]++;
                        m[r[7]]++;
                        continue;
                    }
                    r[3]=suma(i,n,0,j2);
                    if(m[r[3]])
                        m[r[3]]--;
                    else
                    {
                        m[r[1]]++;
                        m[r[4]]++;
                        m[r[7]]++;
                        m[r[2]]++;
                        continue;
                    }
                    r[5]=suma(i2,j2,i,j);
                    if(m[r[5]])
                        m[r[5]]--;
                     else
                    {
                        m[r[1]]++;
                        m[r[4]]++;
                        m[r[7]]++;
                        m[r[3]]++;
                        m[r[2]]++;
                        continue;
                    }
                    r[6]=suma(i2,n,i,j2);
                    if(m[r[6]])
                        m[r[6]]--;
                     else
                    {
                        m[r[1]]++;
                        m[r[4]]++;
                        m[r[7]]++;
                        m[r[3]]++;
                        m[r[2]]++;
                        m[r[5]]++;
                        continue;
                    }
                    r[8]=suma(n,j2,i2,j);
                    if(m[r[8]])
                        m[r[8]]--;
                       else
                    {
                        m[r[1]]++;
                        m[r[4]]++;
                        m[r[7]]++;
                        m[r[3]]++;
                        m[r[2]]++;
                        m[r[5]]++;
                        m[r[6]]++;
                        continue;
                    }
                    r[9]=suma(n,n,i2,j2);
                    if(m[r[9]])
                        m[r[9]]--;
                           else
                    {
                        m[r[1]]++;
                        m[r[4]]++;
                        m[r[7]]++;
                        m[r[3]]++;
                        m[r[2]]++;
                        m[r[5]]++;
                        m[r[8]]++;
                        m[r[6]]++;
                        continue;
                    }

                        fout<<i<<" "<<i2<<" "<<j<<" "<<j2;
                        fin.close();
                        fout.close();
                        exit(0);



                }
            }
}
int main()
{
    fin>>n;
    for(i=1;i<=9;i++)
    {
        fin>>a;m[a]++;
    }

    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        {
            fin>>a;
            v[i][j]=v[i-1][j]+v[i][j-1]+a-v[i-1][j-1];
        }
    back();

    return 0;
}