c++ Source Code for acm 2004-2005 problems

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Sun Jul 12 19:13:43 EDT 2009


En Sun, 12 Jul 2009 19:24:57 -0300, Davood Vahdati  
<davoodvahdati2009 at gmail.com> escribió:

> it is an Acm programming competition Questions in year 2004-2005 .
> could you please solve problems is question ? I  Wan't C++ Source Code
> program About this questions OR Problems . thank you for your prompt
> attention to this matter

Not C++ code but Python: A brute force approach to the first problem.

> Parallelogram Counting
> There are n distinct points in the plane, given by their integer
> coordinates. Find the number of parallelograms whose
> vertices lie on these points.

class Point:
   def __init__(self, x, y): self.x, self.y = x, y
   def __repr__(self): return 'Point(%d,%d)' % (self.x, self.y)

class Segment:
   def __init__(self, p0, p1): self.p0, self.p1 = p0, p1
   def is_parallel(self, other):
     return ((self.p1.x-self.p0.x) * (other.p1.y-other.p0.y) -
             (self.p1.y-self.p0.y) * (other.p1.x-other.p0.x) == 0)

points = [
     Point(-2,-1),
     Point(8,9),
     Point(5,7),
     Point(1,1),
     Point(4,8),
     Point(2,0),
     Point(9,8)]

n = 0
for i,A in enumerate(points):
   for B in points[i+1:]:
     AB = Segment(A,B)
     for C in points:
       if C in (A,B): continue
       BC = Segment(B,C)
       for D in points:
         if D in (A,B,C): continue
         CD = Segment(C,D)
         if AB.is_parallel(CD) and BC.is_parallel(Segment(A,D)):
           print A,B,C,D
           n += 1

n /= 4 # ABCD,BCDA,CDAB,DABC ## BACD etc already removed
print n

-- 
Gabriel Genellina




More information about the Python-list mailing list