Cod sursa(job #253882)

Utilizator katakunaCazacu Alexandru katakuna Data 6 februarie 2009 13:18:17
Problema Grendizer Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 1 Marime 1.36 kb
#include<stdio.h>
#define NMAX 100011
#include<algorithm>
using namespace std;

//struct grendizer {int x,int y;} v[NMAX];

int a[611][611];
int n,m,imax,jmax,i,j,r,x,y,lmax;

int rez(){
int i,j,l,nr = 0;

   for(i=x + 1,j=y+r - 1,l=0; l<r && l<=lmax; l++,i++,j--)
      if( i >= 0 && j >= 0 && i<= imax && j<=jmax &&a[i][j])
         nr++;

   for(i=x+r -1 ,j=y - 1,l=0; l<r && l<=lmax ; l++,i--,j--)
      if( i >= 0 && j >= 0 && i<= imax && j<=jmax &&a[i][j])
         nr++;

   for(i=x - 1,j=y-r + 1 ,l=0; l<r && l<=lmax ; l++,i--,j++)
      if( i >= 0 && j >= 0 && i<= imax && j<=jmax &&a[i][j])
         nr++;

   for(i=x - r + 1,j=y + 1,l=0; l<r && l<=lmax ; l++,i++,j++)
      if( i >= 0 && j >= 0 && i<= imax && j<=jmax &&a[i][j])
         nr++;     
   
return nr;
}


int main(){

   FILE *f=fopen("grendizer.in","r");
   FILE *g=fopen("grendizer.out","w");

   fscanf(f,"%d %d",&n,&m);
   for(i=1; i<=n; i++){
      //fscanf(f,"%d %d",&v[i].x,&v[i].y);
      fscanf(f,"%d %d",&x,&y);
      x+=300;
      y+=300;
      a[x][y] = 1;

      if(x > imax)
         imax = x;

      if(y > jmax)
         jmax = y;

   }

   lmax = max(imax,jmax);

   for(i=1; i<=m; i++){
      fscanf(f,"%d %d %d",&x,&y,&r);
      x+=300;
      y+=300;
      fprintf(g,"%d\n",rez());
   }

   fclose(f);
   fclose(g);
   return 0;
}