IOI '03 - Kenosha, Wisconsin, USA

Seeing the Boundary

Farmer Don watches the fence that surrounds his N meter by N meter square, flat field (2 ≤ N ≤ 500,000). One fence corner is at the origin (0, 0) and the opposite corner is at (N, N); the sides of Farmer Don's fence are parallel to the X and Y axes.

Fence posts appear at all four corners and also at every meter along each side of the fence, for a total of 4N fence posts. The fence posts are vertical and are considered to have no radius. Farmer Don wants to determine how many of his fence posts he can watch when he stands at a given location within his fence.

Farmer Don's field contains R (1 ≤ R ≤ 30 000) huge rocks that obscure his view of some fence posts, as he is not tall enough to look over any of these rocks. The base of each rock is a convex polygon with nonzero area whose vertices are at integer coordinates. The rocks stand completely vertical. Rocks do not overlap, do not touch other rocks, and do not touch Farmer Don or the fence. Farmer Don does not touch the fence, does not stand within a rock, and does not stand on a rock.

Given the size of Farmer Don's fence, the locations and shapes of the rocks within it, and the location where Farmer Don stands, compute the number of fence posts that Farmer Don can see. If a vertex of a rock lines up perfectly with a fence post from Farmer Don's location, he is not able to see that fence post.

Input

The first line of input contains two space-separated integers: N and R.

  • The next line of input contains two space-separated integers that specify the X and Y coordinates of Farmer Don's location inside the fence.
  • The rest of the input file describes the R rocks:
    • Rock i's description starts with a line containing a single integer pi (3 ≤ pi ≤ 20), the number of vertices in a rock's base.
    • Each of the next pi lines contains a space-separated pair of integers that are the X and Y coordinates of a vertex. The vertices of a rock's base are distinct and given in counterclockwise order.

Sample Output

The output file should contain a single line with a single integer, the number of fence posts visible to Farmer Don.

Sample Input     

100 1
60 50
5
70 40
75 40
80 40
80 50
70 60

Sample Output     

319

All Submissions
Best Solutions


Point Value: 20 (partial)
Time Limit: 2.00s
Memory Limit: 64M
Added: Mar 05, 2010

Languages Allowed:
C++03, PAS, C, HASK, ASM, RUBY, PYTH2, JAVA, PHP, SCM, CAML, PERL, C#, C++11, PYTH3

Comments (Search)

Does anyone have any idea why I'm getting RE (signal 6: SIGABRT) on the last 2 test cases? I don't think my code is accessing anything out of bounds

This is covered in the help page:

SIGABRT - Uncaught exception or failed assertion in C++; can also be caused by popping empty stacks and the like. In C++ this is often due to bad_alloc() being thrown by the STL when you try to create too large of a vector, set, map, etc.