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);

}

Download