TopcoderArchiveVisit Topcoder
SRM22 Nov 2011
SRM 547

PillarsDivTwo

Problem statement, definition, constraints, and public examples.

Problem Statement

On a horizontal line, there are N uniformly spaced vertical pillars. The pillars are numbered 0 through N-1, in order. For each i, the distance between the bottoms of pillars i and i+1 is exactly w. For each i, the height of pillar i (0-based index) is an integer between 1 and heights[i], inclusive. We want to take a single piece of rope and use it to join the top ends of all pillars, in order. (Once in place, the rope will have the shape of a polyline consisting of N-1 segments.) What is the shortest length of rope that is guaranteed to be sufficient, regardless of the actual pillar heights?

You are given the int[] heights and the int w. Compute and return the answer to the above question. In other words, find a sequence of pillar heights (within the given constraints) for which the length of the rope we need is maximized, and return that maximum.

Definition

Class:
PillarsDivTwo
Method:
maximalLength
Parameters:
int[], int
Returns:
double
Method signature:
double maximalLength(int[] height, int w)
(be sure your method is public)

Notes

  • Your return value must have a relative or an absolute error of less than 1e-9.

Constraints

  • heights will contain between 1 and 50 elements, inclusive.
  • Each element of heights will be between 1 and 100, inclusive.
  • w will be between 1 and 100, inclusive.

Examples

  1. {3,3,3}
    2
    Returns: 5.656854249492381
  2. {1,1,1,1}
    100
    Returns: 300.0
  3. {100,2,100,2,100}
    4
    Returns: 396.32310051270036
    We will need the most rope if columns 0, 2, and 4 have height 100 each, and columns 1 and 3 have height 1 each.
  4. {2,1,1,2}
    1
    Returns: 3.82842712474619
Back to all problems