Connection Status:
Competition Arena > Shadow
SRM 336 · 2007-01-25 · by dgoodman · Geometry
Class Name: Shadow
Return Type: double
Method Name: area
Arg Types: (vector<int>, vector<int>)
Problem Statement

Problem Statement

We are going to plant a tree on level ground near a streetlight, and we want to know how big a shadow it will cast. We will model the tree as a (possibly degenerate) rectangular solid, and treat the streetlight as casting rays from a single point. We will use an x,y,z coordinate system that is aligned with the rectangular solid and in which y is the distance above ground level.

int[] tree contains exactly 6 elements, namely the x,y,z coordinates of one corner of the rectangular solid followed by the coordinates of the diagonally opposite corner. int[] light contains exactly 3 elements, the x,y,z coordinates of the streetlight. Given tree and light, return the area of the shadow, or return -1 to indicate that the shadow has an infinite area. If the shadow is an infinitely long line, return 0 as its area.

Notes

  • A return value with either an absolute or relative error of less than 1.0E-9 is considered correct.

Constraints

  • tree will contain exactly 6 elements.
  • light will contain exactly 3 elements.
  • Each element of tree and of light will be between 1 and 10, inclusive.
  • The coordinates of the light will not lie on the boundary of the tree.
Examples
0)
{1,1,1, 10,1,1}
{5,5,5}
Returns: 0.0

This tree is just a line so its shadow has no area.

1)
{1,3,1, 10,1,1}
{2,2,2}
Returns: -1.0

This tree is just a rectangle. Its shadow covers an infinite rectangular area on the ground.

2)
{1,1,1, 2,2,2}
{3,3,3}
Returns: 15.75

This is a unit cube one unit above the ground. The shadowed area is a six-sided polygon.

3)
{1,1,1, 3,3,3}
{2,2,2}
Returns: -1.0

When the light is inside the tree the shadow extends everywhere.

4)
{1,1,1, 3,3,3}
{2,5,2}
Returns: 25.0
9)
{1,1,2, 2,2,2}
{3,3,3}
Returns: 3.375

111 222 333 top: 121 222 333 = 9 rhs: 211 222 333 = 3.375 z=2: 112 222 333 = 3.375 total = 15.75

Submissions are judged against all 57 archived test cases, of which 6 are shown here. Case numbers match the judge’s.

Coding Area

Language: C++17 · define a public class Shadow with a public method double area(vector<int> tree, vector<int> light) · 57 test cases · 2 s / 256 MB per case

Submitting as anonymous