Cod sursa(job #2538544)

Utilizator Simon2712Simon Slanina Simon2712 Data 4 februarie 2020 20:29:06
Problema Zone Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.54 kb
#include <iostream>

using namespace std;
int vc[10],v[10],a[512][512];
int main()
{
    int n,m,i,j,l1,c1,l2,c2,s;
    cin>>n;
    m=n;
    for(i=1;i<=9;i++)
      cin>>v[i];
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
      cin>>a[i][j];
      a[i][j]+=a[i][j-1]+a[i-1][j]-a[i-1][j-1];
    }
    for(l1=1;l1<=n;l1++)
    for(c1=1;c1<=m;c1++){
      s=a[l1][c1];
      for(i=1;i<=9;i++)
        vc[i]=0;
      for(i=1;i<=9;i++)///1
      {
        if(v[i]==s)
        {
          vc[i]=1;
          i=20;
        }
      }
      if(i>=20){
        for(l2=l1+1;l2<=n;l2++){
          s=a[l2][c1]-a[l1][c1];
          for(i=1;i<=9;i++)///4
          {
            if(v[i]==s && !vc[i])
            {
              vc[i]=2;
              i=20;
            }
          }
          if(i>=20)
          {
            s=a[n][c1]-a[l2][c1];
            for(i=1;i<=9;i++)///7
            {
              if(v[i]==s && !vc[i])
              {
                vc[i]=3;
                i=20;
              }
            }
            for(c2=c1+1;c2<=m;c2++)
            {
              s=a[l1][c2]-a[l1][c1];
              for(i=1;i<=9;i++)///2
              {
                if(v[i]==s && !vc[i])
                {
                  vc[i]=4;
                  i=20;
                }
              }
              if(i>=20)
              {
                s=a[l1][m]-a[l1][c2];
                for(i=1;i<=9;i++)///3
                {
                  if(v[i]==s && !vc[i])
                  {
                    vc[i]=5;
                    i=20;
                  }
                }
                if(i>=20)
                {
                  s=a[l2][c2]-a[l2][c1]-a[l1][c2]+a[l1][c1];
                  for(i=1;i<=9;i++)///5
                  {
                    if(v[i]==s && !vc[i])
                    {
                      vc[i]=6;
                      i=20;
                    }
                  }
                  if(i>=20)
                  {
                    s=a[l2][m]-a[l2][c2]-a[l1][m]+a[l1][c2];
                    for(i=1;i<=9;i++)///6
                    {
                      if(v[i]==s && !vc[i])
                      {
                        vc[i]=7;
                        i=20;
                      }
                    }
                    if(i>=20)
                    {
                      s=a[n][c2]-a[n][c1]-a[l2][c2]+a[l2][c1];
                      for(i=1;i<=9;i++)///8
                      {
                        if(v[i]==s && !vc[i])
                        {
                          vc[i]=8;
                          i=20;
                        }
                      }
                      if(i>=20)
                      {
                        cout<<l1<<" "<<c1<<" "<<l2<<" "<<c2;
                        l1=l2=c1=c2=max(n,m)+1;
                      }
                    }

                  }
                  else
                  for(i=1;i<=9;i++)
                    if(vc[i]>=5)
                      vc[i]=0;
                }
                else
                for(i=1;i<=9;i++)
                  if(vc[i]>=4)
                    vc[i]=0;
              }
              else
              for(i=1;i<=9;i++)
                if(vc[i]>=3)
                  vc[i]=0;
            }
          }
          else
          for(i=1;i<=9;i++)
            if(vc[i]>=2)
              vc[i]=0;
        }

      }
      else
      for(i=1;i<=9;i++)
        if(vc[i]>=1)
          vc[i]=0;
    }
    return 0;
}