Pagini recente » Cod sursa (job #2904515) | Cod sursa (job #720735) | Cod sursa (job #1091790) | Diferente pentru implica-te/arhiva-educationala intre reviziile 160 si 159 | Cod sursa (job #991895)
Cod sursa(job #991895)
#include <fstream>
#include <algorithm>
#include <cstdlib>
using namespace std;
ifstream f("zone.in");
ofstream g("zone.out");
int m[513][513],i,j,k,n,l1,c1,l2,c2,a,l,o,p,y;
long long int v[10],sum,vf[10];
int main()
{
f>>n;
for (i=1;i<=9;++i)f>>v[i];sort(v+1,v+10);
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
f>>a,m[i][j]=m[i][j-1]+a;
for (i=1;i<=n;++i)
for (j=1;j<=n;++j,sum=0)
{
for (k=1;k<=i;++k)
sum+=m[k][j];
for (k=1;k<=9;++k)
if (sum==v[k])break;
if (k!=10)
{ sum=0;
for (o=i+1;o<=n;++o)
for (p=j+1;p<=n;++p,sum=0)
{
for (k=i+1;k<=o;++k)
sum+=m[k][p]-m[k][j];
for (k=1;k<=9;++k)
if (sum==v[k])break;
if (k!=10)
{
sum=0;
l1=i;l2=o;c1=j;c2=p;
//g<<l1<<" "<<l2<<" "<<c1<<" "<<c2<<'\n';
for (y=1;y<=l1;++y)vf[1]+=m[y][c1];
for (;y<=l2;++y)vf[2]+=m[y][c1];
for (;y<=n;++y)vf[3]+=m[y][c1];
for (y=1;y<=l1;++y)vf[4]+=m[y][c2]-m[y][c1];
for (;y<=l2;++y)vf[5]+=m[y][c2]-m[y][c1];
for (;y<=n;++y)vf[6]+=m[y][c2]-m[y][c1];
for (y=1;y<=l1;++y)vf[7]+=m[y][n]-m[y][c2];
for (;y<=l2;++y)vf[8]+=m[y][n]-m[y][c2];
for (;y<=n;++y)vf[9]+=m[y][n]-m[y][c2];
/*for (y=1;y<10;++y)
g<<vf[y]<<" ";
g<<'\n';*/
sort (vf+1,vf+10);
for (y=1;y<10;++y)
if (v[y]!=vf[y])
break;
if (y==10)
{g<<l1<<" "<<l2<<" "<<c1<<" "<<c2<<'\n';g.close();exit(0);}
for (y=1;y<10;++y)
vf[y]=0;
}
}
}
}
return 0;
}