Problem Statement
An array of integers is called convex if all of the following apply:
- It contains an even number of elements.
- It contains between 6 and 50 elements, inclusive.
- Each element is an integer between 1 and 50, inclusive. Interpret the integers as the coordinates of n points: x_1, y_1, x_2, y_2, ..., x_n, y_n (in this order).
- These n points are vertices of a convex polygon.
- The vertices are listed in either clockwise or counterclockwise order.
- No three consecutive vertices lie on the same straight line (when saying three consecutive vertices we also mean vertices number N, 1 and 2 and vertices number N-1, N and 1).
Given a
Definition
- Class:
- ConvexArray
- Method:
- getEnding
- Parameters:
- int[]
- Returns:
- int[]
- Method signature:
- int[] getEnding(int[] beginning)
- (be sure your method is public)
Constraints
- beginning will contain between 0 and 50 elements, inclusive.
- Each element of beginning will be between 1 and 50, inclusive.
Examples
{1, 1, 2, 2}
Returns: {1, 2 }
The polygon must contain at least 3 points, so we need to add at least one more. Adding (1, 1) would give us a segment, not a polygon, thus we stick to the next lexicographical point which is (1, 2).
{5, 6, 6}
Returns: {1, 1, 1 }
It is possible that the x coordinate is given and you have to choose the y coordinate.
{1, 3}
Returns: {1, 1, 2, 1 }
(1, 1, 1, X) would form a segment, not a triangle. Move on to the next lexicographical quadruple, (1, 1, 2, 1).
{1, 2, 3, 4, 5}
Returns: {1 }
{2, 5, 5, 5, 4, 4, 3}
Returns: {4 }
We need to find the y coordinate for the last vertex that will generate a convex polygon. Points (3, 1) and (3, 2) would make the polygon non-convex. Point (3, 3) would break the rules because there would be three consecutive vertices on the same straight line. Point (3, 4) is the only valid choice.
{}
Returns: {1, 1, 1, 2, 2, 1 }
{1}
Returns: {1, 1, 2, 2, 1 }
{2}
Returns: {1, 1, 1, 1, 2 }
{50}
Returns: {1, 1, 1, 1, 2 }
{1, 1}
Returns: {1, 2, 2, 1 }
{1, 2}
Returns: {1, 1, 2, 1 }
{2, 1}
Returns: {1, 1, 1, 2 }
{5, 6}
Returns: {1, 1, 1, 2 }
{1, 1, 1}
Returns: {2, 2, 1 }
{1, 1, 2}
Returns: {1, 1, 2 }
{1, 2, 1}
Returns: {1, 2, 1 }
{1, 2, 2}
Returns: {1, 1, 1 }
{1, 10, 1}
Returns: {1, 2, 1 }
{1, 50, 49}
Returns: {1, 1, 1 }
{2, 1, 1}
Returns: {1, 1, 2 }
{2, 1, 2}
Returns: {2, 1, 1 }
{2, 1, 4}
Returns: {1, 1, 2 }
{2, 2, 1}
Returns: {1, 1, 2 }
{2, 2, 2}
Returns: {1, 1, 1 }
{2, 40, 50}
Returns: {1, 1, 1 }
{3, 1, 1}
Returns: {1, 1, 2 }
{3, 1, 3}
Returns: {2, 1, 1 }
{3, 3, 1}
Returns: {1, 1, 2 }
{3, 40, 6}
Returns: {1, 1, 1 }
{5, 1, 1}
Returns: {1, 1, 2 }
{7, 1, 8}
Returns: {1, 1, 2 }
{1, 1, 2, 2}
Returns: {1, 2 }
{1, 1, 1, 10}
Returns: {2, 1 }
{3, 3, 5, 5}
Returns: {1, 2 }
{49, 49, 50, 50}
Returns: {1, 2 }
{1, 7, 1, 19}
Returns: {2, 1 }
{1, 50, 50, 1}
Returns: {1, 1 }
{35, 1, 15, 1, 25}
Returns: {2 }
{5, 4, 7, 7, 3}
Returns: {2 }
{8, 1, 24, 1, 3}
Returns: {2 }
{1, 50, 20, 32, 50}
Returns: {1 }
{23, 24, 25, 26, 27, 29}
Returns: { }
{5, 1, 24, 21, 46, 42}
Returns: { }
{10, 1, 20, 1, 15, 10, 12}
Returns: {5 }
{33, 20, 41, 10, 48, 20, 41}
Returns: {21 }
{9, 2, 8, 3, 9, 16, 10}
Returns: {2 }
{1, 1, 5, 2, 10, 5, 15}
Returns: {9 }
{1, 1, 2, 1, 4, 12, 5}
Returns: {18 }
{4, 4, 4, 6, 6, 6, 6}
Returns: {1 }
{2, 6, 5, 48, 43, 33, 35, 12}
Returns: { }
{23, 21, 21, 21, 21, 23, 23, 23, 24}
Returns: {22 }
{5, 49, 3, 31, 9, 28, 7, 49, 6}
Returns: {50 }
{30, 20, 20, 10, 10, 20, 20, 30, 25}
Returns: {26 }
{1, 1, 5, 6, 9, 8, 5, 3, 4}
Returns: {2 }
{2, 50, 1, 49, 1, 2, 2, 1, 49, 1, 50, 2, 50, 49, 3}
Returns: {50 }
{10, 37, 11, 46, 1, 1, 2, 1, 3, 2, 4, 4, 5, 7, 6, 11, 7, 16, 8, 22, 9}
Returns: {29 }
{12, 42, 16, 46, 21, 49, 26, 50, 30, 49, 35, 46, 39, 42, 43, 36, 46, 28, 48, 20, 50, 11, 50, 10, 49, 9, 47, 8, 44, 7, 40, 6, 29, 4, 22, 3, 14, 2, 5, 1, 1, 1, 1, 11, 3, 20, 5, 28, 8}
Returns: {35 }
{45, 25, 42, 35, 35, 42, 25, 45, 15, 42, 8, 35, 5, 25, 8, 15, 15, 8, 25, 5, 35, 8, 42, 15, 44}
Returns: {18 }
{41, 49, 33, 47, 25, 43, 17, 37, 9, 28, 1, 1, 25, 25, 49}
Returns: {50 }
{1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49}
Returns: { }
{1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 3}
Returns: {18 }
{40, 30, 20, 30, 10, 31, 20, 32, 40, 32, 50}
Returns: {31 }
{1, 1, 2, 3, 3, 1, 1, 2, 3}
Returns: {-1 }
No matter what the last y-coordinate is, the edge (1, 1)-(2, 3) intersects the edge (3, 1)-(1, 2), so there is no convex polygon possible.
{1, 1, 1, 1}
Returns: {-1 }
{23, 9, 23, 9}
Returns: {-1 }
{50, 50, 50, 50}
Returns: {-1 }
{50, 50, 50, 50, 23}
Returns: {-1 }
{12, 6, 12, 48, 12}
Returns: {-1 }
{30, 50, 38, 48, 39, 49, 40}
Returns: {-1 }
{5, 1, 7, 3, 8, 2, 9}
Returns: {-1 }
{2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, 4, 4, 4, 4, 2}
Returns: {-1 }
{1, 1, 1, 9, 5, 9, 5, 5, 1, 5, 1, 9, 5, 9, 5, 1}
Returns: {-1 }
{20, 20, 20, 30, 30, 30, 30, 20, 20, 20, 20, 28, 28, 28, 28, 20}
Returns: {-1 }
{25, 1, 23, 5, 25, 7, 27, 5, 25, 1, 10, 8, 24, 14, 40}
Returns: {-1 }
{6, 1, 5, 2, 7, 5, 9, 2, 8, 1, 7}
Returns: {-1 }
{3, 14, 15, 9, 2, 6, 5, 35, 8, 9, 7, 9}
Returns: {-1 }
{4, 4, 8, 6, 8, 4, 4, 6, 4, 8, 5}
Returns: {-1 }
{5, 6, 6, 6, 7, 7, 8, 8, 9}
Returns: {-1 }
{10, 10, 50, 1, 50, 50, 1, 50, 1, 1, 20, 2, 15}
Returns: {-1 }
{4, 6, 4, 3, 7, 3, 7, 7, 3, 7, 3, 4, 5}
Returns: {-1 }
{50, 25, 44, 39, 32, 46, 18, 44, 10, 35, 10, 25, 16, 18, 22, 16, 26, 19, 29, 22, 30, 25, 29, 27, 26, 30, 22, 33, 16, 31, 11, 25, 10, 14, 18, 5, 32, 3, 44, 10}
Returns: {-1 }
{44, 24, 34, 39, 15, 40, 4, 26, 10, 10, 29, 6, 43, 18, 39, 35, 21, 41, 5, 31, 7, 14, 24, 6, 40, 14, 42, 31, 26, 41}
Returns: {-1 }
{1, 25, 5, 37, 14, 45, 26, 47, 36, 43, 43, 35, 45, 25, 42, 16, 35, 10, 26, 9, 19, 12, 14, 18, 13, 25, 16, 31, 20, 35, 26, 35, 30, 33, 33, 29, 33, 25, 14}
Returns: {-1 }
{25, 1, 34, 3, 42, 8, 47, 16, 49, 25, 47, 34, 41, 41, 34, 46, 25, 48, 16, 46, 9, 41, 4, 34, 3, 25, 5, 17, 9, 9, 17, 5, 25, 3, 33, 5, 40, 10, 44, 17, 46, 25, 30}
Returns: {-1 }
{1, 25, 25, 3, 45, 25, 25, 43, 9, 25, 25, 11, 37, 25, 25}
Returns: {-1 }
{2, 1, 2 }
Returns: {2, 1, 1 }
{1 }
Returns: {1, 1, 2, 2, 1 }
{ }
Returns: {1, 1, 1, 2, 2, 1 }
{50, 50, 1, 1, 1, 2 }
Returns: { }
{1, 1, 1, 2, 2, 2, 2, 1 }
Returns: { }