Cod sursa(job #1383144)
Utilizator | Data | 9 martie 2015 22:14:47 | |
---|---|---|---|
Problema | Zone | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.72 kb |
#include <fstream>
#include <map>
#include <algorithm>
using namespace std;
FILE *f = fopen("zone.in","r");
FILE *g = fopen("zone.out","w");
map<long long int,int> m;
int a,b,i,n,j,i2,j2,l;long long int r[10],v[520][520];
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;
}
fprintf(g,"%d %d %d %d\n",i,i2,j,j2);
fclose(f);
fclose(g);
exit(0);
}
}
}
int main()
{
fscanf(f,"%d",&n);
for(int i=1;i<=9;i++)
fscanf(f,"%lld ",&m[i]);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
fscanf(f,"%lld ",&v[i][j]);
v[i][j]=v[i-1][j]+v[i][j-1]-v[i-1][j-1];
}
back();
return 0;
}