Cod sursa(job #70638)

Utilizator moga_florianFlorian MOGA moga_florian Data 6 iulie 2007 16:41:51
Problema Dreptunghiuri Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<stdio.h>
#define Nmax 404

char solved[Nmax][Nmax];
int rad[170000];

int main()
{
FILE *fin=fopen("dreptunghiuri.in","r"),
     *fout=fopen("dreptunghiuri.out","w");
     
int M,N,W,H,A,i,delta,C;
fscanf(fin,"%d%d",&M,&N);

for(i=1; i*i<=160000; i++)
   rad[i*i]=i;

long long sol=0,crt;

for(H=1;H<M;H++)
  for(W=1;W<N;W++)
//     if(solved[H][W] == 0)
        {
        crt=0;
        
        for(A=1;A<H;A++)
           {
           delta= W*W - 4*A*(H-A);
           if(rad[delta] || delta==0)
              {
                         
              //sol1
              C=W-rad[delta];
              if(C % 2 ==0 && C/2 > 0 && C/2 <= W )
                 crt++;
              
                               
              //sol2
              C=W+rad[delta];
              if(C%2==0 && C/2>0 && C/2<=W)
                 crt++;                         
                 
              if(delta==0 && W%2==0 && W/2>0 && W/2<=W)
                 crt--;                
              }   
           }
        crt++;
           
        crt*= (M-H) * (N-W);                   
/*        solved[H][W]=1;    

        if(W<=M && H<=N && H!=W)
           {
           crt*=2;
           solved[W][H]=1;
           }
*/               
        sol+=crt;     
        }
   
fprintf(fout,"%lld\n",sol);
fclose(fin);
fclose(fout);
return 0;    
}