Pagini recente » Cod sursa (job #1873594) | Cod sursa (job #1871482) | Cod sursa (job #899849) | Cod sursa (job #2338865) | Cod sursa (job #330377)
Cod sursa(job #330377)
#include <stdio.h>
//#include <math.h>
#define dim 401
long long n, m, sol;
int sqrt[dim*dim];
long long nrsol[dim][dim];
int main() {
long long i, tmp, h, w, a, bb, cc, dd, s1, s2;
//long long sqr;
freopen("dreptunghiuri.in", "r", stdin);
freopen("dreptunghiuri.out", "w", stdout);
scanf("%lld %lld\n", &n, &m);
for (i=1; i*i<dim*dim; ++i) sqrt[i*i]=(int)i;
sol=(n-1)*(m-1); //nr of rectangles with h=1 and w=1
for (h=1; h<n; ++h)
for (w=1; w<m; ++w)
if (h==1 && w==1) continue;
else if (nrsol[h][w]) sol+=nrsol[h][w]*(n-h)*(m-w);
else if (nrsol[w][h]) sol+=nrsol[w][h]*(n-h)*(m-w);
else {
tmp=0;
for (a=1; a<=h>>1; ++a) {
if (a<<1==h) continue;
bb=-w;
cc=a*(h-a);
dd=bb*bb-4*cc;
//sqr=(long long)sqrt(dd);
if (dd<0) continue;
if (!dd) ++tmp;
else if (sqrt[dd]) {
s1=(-bb+sqrt[dd])>>1;
s2=(-bb-sqrt[dd])>>1;
if (s1>0) ++tmp;
if (s2>0) ++tmp;
}
/*else if (sqr*sqr==dd) {
s1=(-bb+sqr)>>1;
s2=(-bb-sqr)>>1;
if (s1>0) ++tmp;
if (s2>0) ++tmp;
}*/
}
tmp<<=1;
if ((h&1)==0) {
a=h>>1;
bb=-w;
cc=a*(h-a);
dd=bb*bb-4*cc;
//sqr=(long long)sqrt(dd);
if (!dd) ++tmp;
else if (sqrt[dd]) {
s1=(-bb+sqrt[dd])>>1;
s2=(-bb-sqrt[dd])>>1;
if (s1>0) ++tmp;
if (s2>0) ++tmp;
}
/*else if (sqr*sqr==dd) {
s1=(-bb+sqr)>>1;
s2=(-bb-sqr)>>1;
if (s1>0) ++tmp;
if (s2>0) ++tmp;
}*/
}
++tmp; //add the rect itself
nrsol[h][w]=nrsol[w][h]=tmp;
sol+=tmp*(n-h)*(m-w);
}
printf("%lld\n", sol);
return 0;
}