VTRI - Triangles
Tác giả: hieult
Ngôn ngữ: C++
#include<stdio.h>
#define mmax(a,b) ((a<b)?(b):(a))
#define mmin(a,b) ((a<b)?(a):(b))
#define myabs(a) ((a<0)?(-a):(a))
int main ()
{
int w, h, a;
long long total = 0;
register int i, j, p, q;
int k1, dy, k,z;
scanf (" %d %d %d", &w, &h, &a);
total=0;
a=2*a;
for (i = 0; i <= h; i++)
for (j = -w; j <= w; j++)
{
if (i == 0 && j == 0)
continue;
for (p = 0; p <= h; p++)
{
k = (( -a) + p * j);
k1 = ((p * j) + a);
z = ((h + 1) - mmax (p, i));
if (i && j>=0 && (k1%i==0))
{
q = k1 / i;
{
if (q >= 0 && q <= w )
{
if (p == 0 && q == 0)
goto other;
total += z*((w + 1) - mmax (j, q));
}
}
}
other:
if (i && (k%i==0))
{
q = k / i;
if (p == 0 && q == 0)
continue;
dy = -mmin (q, j);
k=mmax(q+dy,j+dy);
{
if ( q>=-w&& q <= w)
{
if ( k<=w )
{
if (p == 0 && (q + dy == 0))
continue;
if (i == 0 && (j + dy == 0))
continue;
if ( j >= 0 && q >= 0)
continue;
total += z* ((w + 1) - mmax (k, dy));
}
}
}
}
}
}
printf ("%lld\n", total);
}