User:Jeff/ACM/Lots of Sunlight

Back to ACM page

Lots of Sunlight
The Apartment Construction Management (ACM) has several new high-rise apartment buildings in suburban Shanghai. With the booming economy, ACM expects a considerable profit on apartment leases. Because their apartments receive more direct sunlight, the company claims that these are nicer than others in the area. No other buildings obstruct the sunlight path to apartments in ACM's tall buildings.

ACM wants to verify this claim by telling potential residents exactly how much sunlight a given apartment receives. To offer customers a representative sample of sunlight hours, the company wants to advertisee the sunlight hours for April 6, 2005. On that day in Shanghai, the sun rises at 5:37 am, and sets at 6:17 pm.



As shown above, apartments are in a series of buildings aligned east to west. The last two digits of the apartment number identify the building, starting with 01 for the east-most building. The other digits encode the apartment floor, with 1 as the ground floor.

The sun rises in the east and travels at a constant radial speed across the sky, until setting in the west. The only shadows are created by buildings (i.e. each building can cast a shadow on one or more other buildings). An apartment is considered to receive sunlight when either its eastern or wester wall is fully covered in sunlight or when the sun is directly overhead.

Input
The input file contains a series of descriptions of apartment complexes. Each description starts with a line containing a single integer n (1 &le; n < 100) that is the number of apartment buildings in the complex. The next line has two integers w, the width (in east-west direction), and h, each apartment's height in meters. Next is a list of integers m(1), d(1), m(2), d(2), ..., d(n-1), m(n), where m(i) is the number of apartments in apartment building i, and d(i) is the distance, in meters, between the apartment building i and apartment building i+1.

The apartment complex description is followed by an integer list of apartments to query for sunlight hours and is terminated by a zero. The input file is terminated by a line consisting of the integer zero.

Output
For each apartment complex description, output its number in the sequence of descriptions. Then for each query, output the corresponding sunlight hours, using the 24-hour time format. Truncate all times down to the nearest second. If the query refers to an apartment that does not exist, indicate that the apartment does not exist. Follow the format shown in the sample output.

Analysis
Out of the ten problems at world finals, Lots of Sunlight was solved by the most teams. It is easy to understand, and straightforward to solve with a little trigonometry.

For each apartment to query, we need to first determine if it exists in the input. Assuming that it does, we calculate the starting and ending sunlight times individually. To find the starting time, consider a point p at the bottom-west corner of the apartment. For each building to the west, connect that building's upper-east corner to the point p. Find the angle that this line makes with the horizon (using the  function), and take the largest angle out of all the buildings to the west. Do the same with the bottom-east corner of the apartment and the upper-west corner of buildings to the east, and you'll have the ending angle calculated.