Cod sursa(job #1242893)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 15 octombrie 2014 10:17:25
Problema Dreptunghiuri Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<cstdio>
#include<cmath>
int n,m,i,j,h,w,a,ra,x[500][500],v[200000],s;
FILE *f,*g;
int main(){
    f=fopen("dreptunghiuri.in","r");
    g=fopen("dreptunghiuri.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=400*400;i++){
        v[i]=-1;
    }
    for(i=1;i<=400;i++){
        v[i*i]=i;
    }
    for(h=1;h<n;h++){
        for(w=1;w<m;w++){
            for(i=1;i<h;i++){
                a=w*w-(4*i*(h-i));
                ra=v[a];
                if(a>=0&&ra>=0){
                    if(a==0&&w%2==0&&w/2>=1)
                        x[h][w]++;
                    else{
                        if(a>0&&(w+ra)%2==0&&(w+ra)/2>=1&&w>ra)
                            x[h][w]++;
                        if(a>0&&(w-ra)%2==0&&(w-ra)/2>=1)
                            x[h][w]++;
                    }
                }
            }
            x[h][w]++;
        }
    }
    for(i=1;i<n;i++){
        for(j=1;j<m;j++){
            s+=x[i][j]*(n-i)*(m-j);
        }
    }
    fprintf(g,"%d",s);

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