Mai intai trebuie sa te autentifici.
Cod sursa(job #1503720)
Utilizator | Data | 16 octombrie 2015 20:06:02 | |
---|---|---|---|
Problema | Zone | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.2 kb |
#include <cstdio>
#define NMAX 520
long long val[15],sum[NMAX][NMAX],tmp;
int n;
bool vis[15];
int gas(long long nr)
{
for(int i=1;i<=9;i++)
{
if(vis[i]==0&&val[i]==nr)
{
vis[i]=1;
return 1;
}
}
return 0;
}
void reset(long long nr)
{
for(int i=1;i<=9;i++)
{
if(vis[i]==1&&val[i]==nr)
{
vis[i]=0;
return;
}
}
}
int main()
{
freopen ("zone.in","r",stdin);
freopen ("zone.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=9;i++) scanf("%lld",&val[i]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%lld",&tmp);
sum[i][j]=(tmp+sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]);
}
}
for(int i=1;i<n;i++)
{
for(int j=1;j<n;j++)
{
if(gas(sum[i][j])==1)
{
for(int k=i+1;k<n;k++)
{
if(gas(sum[k][j]-sum[i][j])==1)
{
if(gas(sum[n][j]-sum[k][j])==1)
{
for(int s=j+1;s<n;s++)
{
if(gas(sum[i][s]-sum[i][j])==1)
{
if(gas(sum[i][n]-sum[i][s])==1)
{
if(gas(sum[k][s]-sum[i][s]-sum[k][j]+sum[i][j])==1)
{
if(gas(sum[k][n]-sum[i][n]-sum[k][s]+sum[i][s])==1)
{
if(gas(sum[n][s]-sum[k][s]-sum[n][j]+sum[k][j])==1)
{
if(gas(sum[n][n]-sum[k][n]-sum[n][s]+sum[k][s])==1)
{
printf("%d %d %d %d\n",i,k,j,s);
return 0;
reset(sum[n][n]-sum[k][n]-sum[n][s]+sum[k][s]);
}
reset(sum[n][s]-sum[k][s]-sum[n][j]+sum[k][j]);
}
reset(sum[k][n]-sum[i][n]-sum[k][s]+sum[i][s]);
}
reset(sum[k][s]-sum[i][s]-sum[k][j]+sum[i][j]);
}
reset(sum[i][n]-sum[i][s]);
}
reset(sum[i][s]-sum[i][j]);
}
}
reset(sum[n][j]-sum[k][j]);
}
reset(sum[k][j]-sum[i][j]);
}
}
reset(sum[i][j]);
}
}
}
}