Cod sursa(job #18336)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 18 februarie 2007 11:37:27
Problema Plantatie Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 0.97 kb
#include<stdio.h>
long int n,m1,i,a,t,x,y,b,p,j,l,k,max,f1,m[500][500][9];
int main()
{	FILE *f=fopen("plantatie.in","r");
	FILE *g=fopen("plantatie.out","w");
	fscanf(f,"%ld%ld",&n,&m);
	for(i=1;i<=n;i++)
	for(j=1;j<=n;j++)
	fscanf(f,"%ld",&m[a][b][0]);
	f1=1;
	while(f1<=n){for(k=1;k<=n-f1;k++)
				 for(l=1;l<=n-f1;l++)
				 { max=0;
					if(max<m[l][k][j-1]) max=m[l][k][j-1];
					if(max<m[l+f1][k][j-1]) max=m[l+f1][k][j-1];
					if(max<m[l][k+f1][j-1]) max=m[l][k+f1][j-1];
					if(max<m[l+f1][k+f1][j-1]) max=m[l+f1][k+f1][j-1];
					m[l][k][j]=max;
				 }
					 f1=f1*2;
				}
	for(t=1;t<=m1;t++)
	{	fscanf(f,"%ld%ld%ld",&i,&j,&k);
		l=k; f1=1; x=i; y=j; max=m[x][y][0];
		for(i=0;i<=8;i++) 
		{	if(l%2==1){for(p=0;p<f1*l;p=p+f1)
						{ if(m[x+p][y][i]>max) max=m[x+p][y][i];
						  if(m[x][y+p][i]>max) max=m[x][y+p][i];
						}
						 x=x+f1; y=y+f1; l=l-f1;
						}
			f1=f1*2; l=l/2;
		}
		fprintf(g,"%ld",max);
	}
	fcloseall();
	return 0;
}