Pagini recente » Cod sursa (job #2427206) | Cod sursa (job #1454483) | Cod sursa (job #501574) | Cod sursa (job #230245) | Cod sursa (job #741881)
Cod sursa(job #741881)
#include<stdio.h>
#include<cmath>
#define maxdim 405
FILE*f=fopen("dreptunghiuri.in","r");
FILE*g=fopen("dreptunghiuri.out","w");
int n,m;
int D[maxdim][maxdim],p[maxdim];
double rad[5*maxdim*maxdim];
inline int compute ( int L , int l ){
int res = 1; --L; --l;
for ( int j = 1 ; j <= L ; ++j ){
int delta = p[l] - ((j*(L) - p[j])<<2);
if ( delta < 0 ) continue ;
if ( rad[delta] != (int)rad[delta] ) continue ;
delta = (int)rad[delta];
int x1 = (l + delta); int aux = x1;
int x2 = (l - delta);
if ( !(x1&1) ){
x1 >>= 1;
if ( x1 > 0 && x1 < l ){
++res;
}
}
if ( x2 != aux && !(x2&1) ){
x2 >>= 1;
if ( x2 > 0 && x2 < l ){
++res;
}
}
}
return res;
}
int main () {
fscanf(f,"%d %d",&n,&m);
for ( int i = 1 ; i <= 800000 ; ++i ){
rad[i] = sqrt(i);
}
for ( int i = 1 ; i <= 400 ; ++i ){
p[i] = i*i;
}
long long sol = 0;
for ( int i = 2 ; i <= n ; ++i ){
for ( int j = i ; j <= m ; ++j ){
int now = compute(i,j); D[i][j] = D[j][i] = now;
sol += 1LL * now * (n-i+1) * (m-j+1);
if ( n-j+1 > 0 && m-i+1 > 0 && i != j )
sol += 1LL * now * (n-j+1) * (m-i+1);
}
}
for ( int i = 2 ; i <= n ; ++i ){
for ( int j = 2 ; j <= m ; ++j ){
if ( !D[i][j] ){
int now = compute(i,j);
sol += 1LL * now * (n-i+1) * (m-j+1);
}
}
}
fprintf(g,"%lld\n",sol);
fclose(f);
fclose(g);
return 0;
}