Cod sursa(job #1662866)

Utilizator razvanlgu31Razvan Lungu razvanlgu31 Data 25 martie 2016 10:38:56
Problema Zone Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.63 kb
#include <fstream>

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

int n,c[15],i,a[530][530],b[530][530],j,k,x,x2,t,l;
struct elem
{
    int l,c,s;
} ca[15][15],sol[1000][15];
int ver2(int l,int z,int k)
{
    int x=0;
    x=b[l][n]-b[l][z];
    for(int i=1;i<=9;i++)
    {
        if(x==c[i] && i!=k && i!=sol[i][1].s && i!=sol[i][2].s && i!=sol[i][1].s)
            return x;
    }
    return 0;
}
int ver1(int l,int z,int k)
{
    int x=0;
    x=b[n][z]-b[l-1][z];
    for(int i=1;i<=9;i++)
    {
        if(x==c[i] &&i!=ca[1][i].s && i!=k)
            return x;
    }
    return 0;
}
int main()
{
    fin>>n;
    for(i=1; i<=9; i++)
        fin>>c[i];
    for(i=1;i<=n; i++)
        for(j=1; j<=n; j++)
        {
            fin>>a[i][j];
            b[i][j]=a[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];
            for(k=1; k<=9; k++)
            {
                if(b[i][j]==c[k])
                {
                    x++;
                    ca[1][x].s=k;
                    ca[1][x].l=i;
                    ca[1][x].c=j;
                }
            }
        }

         for(i=1; i<=x; i++)
    {
        for(j=ca[1][i].l+1;j<n;j++)
        {
            t=b[j][ca[1][i].c]-b[ca[1][i].l][ca[1][i].c];
             for(k=1; k<=9; k++)
            {
                l=ver1(j+1,ca[1][i].c,k);
                if(t==c[k] && k!=ca[1][i].s && l!=0)
                {
                    x2++;
                    sol[x2][1].l=ca[1][i].l;
                    sol[x2][1].c=ca[1][i].c;
                    sol[x2][1].s=ca[1][i].s;
                    sol[x2][2].c=ca[1][i].c;
                    sol[x2][3].c=ca[1][i].c;
                    sol[x2][2].l=j;
                    sol[x2][2].s=k;
                    sol[x2][3].l=n;
                    sol[x2][3].s=l;
                }
            }
        }
    }
        for(i=1;i<=x2;i++)
        {
            for(j=sol[i][1].c+1;j<n;j++)
            {
                t=b[sol[i][1].l][j]-b[sol[i][1].l][sol[i][1].c];
                for(k=1;k<=9;k++)
                {
                    l=ver2(sol[i][1].l,j,k);
                    if(t==c[k] && k!=sol[i][1].s && k!=sol[i][2].s && k!=sol[i][1].s && l!=0)
                    {
                     fout<<sol[i][1].l<<" "<<sol[i][2].l<<" "<<sol[i][1].c<<" "<<j;
                     return 0;
                    }
                }
            }
        }

        fout<<'\n';
        for(i=1;i<=n; i++)
            {
        for(j=1; j<=n; j++)
        {
            fout<<b[i][j]<<" ";
        }
            fout<<'\n';
            }
    return 0;
}