Superposition of two rectilinear skylines P76893


Statement
 

pdf   zip   main.cc

html

The skyline of a city shows the horizon view of its buildings. In this problem we are dealing with rectilinear skylines such us the ones shown in the figure. Each skyline can be represented by a vector of points [(x0,y0),…,(xn−1,yn−1)] with the following properties:

    xiyi ≥ 0 ∀ i∈{0,…,n−1}
    xi−1 < xi ∀ i∈{1,…,n−1}
    yi−1 ≠ yi ∀ i∈{1,…,n−1}
    x0 > 0, yn−1 = 0

An empty skyline is represented by an empty vector. A non-empty skyline must have at least two points.

The next figure shows three skylines that are represented by the red points. The top-left skyline is represented by the vector of points:

[(1,2), (4,4), (6,1), (8,0), (10,3), (12,1), (14,0)] 

The problem consists of generating the skyline obtained by the superposition of two skylines. In the figure, the skyline at the right is obtained by the superposition of the two skylines at the left.

Input

The input will start with a number t of test cases. Each test case will be made of two skylines. Each skyline will be represented by its number of points n and its set of points x0 y0 x1 y1 … xn−1 yn−1 (fullfilling the previous properties). All the values are integers.

Output

The output will consist of t lines, each one representing the skyline obtained after the superposition of two skylines of the corresponding test. Use the same format as the input.

Observation

Download the code.cc file: you only have to implement the skyline_superposition() function. Do not modify the other functions.

Public test cases
  • Input

    4
    7 1 2 4 4 6 1 8 0 10 3 12 1 14 0
    5 2 3 6 2 9 0 11 4 13 0
    2 0 8 10 0
    4 3 15 8 4 10 2 12 0
    0
    3 5 1 7 3 9 0
    0
    0
    

    Output

    9 1 2 2 3 4 4 6 2 9 0 10 3 11 4 13 1 14 0
    5 0 8 3 15 8 8 10 2 12 0
    3 5 1 7 3 9 0
    0
    
  • Information
    Author
    Jordi Cortadella
    Language
    English
    Official solutions
    C++
    User solutions
    C++