Tennis tournament

Consider a tennis tournament with m participants with names
x₁, x₂, …, x_(m), where m is a power of two. In the first round x₁ plays
against x₂, x₃ plays against x₄, …, and x_(m − 1) plays against x_(m).
The players that lose are eliminated, and the process is repeated with
the remaining players. When only a player remains, this is the winner of
the tournament.

For instance, let m = 8, and suppose that in the first round x₁ defeats
x₂, x₃ loses against x₄, x₅ defeats x₆, and x₇ defeats x₈. In the second
round x₁ plays against x₄ (suppose that x₄ wins), and x₅ plays against
x₇ (suppose that x₇ wins). In the third and last round x₄ plays against
x₇. Assuming that x₄ wins, this is the champion. The following figure
shows the championship just described:

[image]

Write a procedure that, given the names of the players and the table of
results, returns the name of the winner of the tournament:

        string winner(const vector<string>& name, const vector<bool>& win);

The vector @name@ has size m, where m is any power of 2. For each @j@
between 0 and m − 1, we have @name[j]@  = x_(j + 1). All the names are
different.

For instance, this could be the table of names of the tournament
previously described:

[image]

The vector @win@ has size m − 1 and contains all the results of the
matches: the first round is stored in the last m/2 positions, the second
round is stored in the m/4 previous positions, the third round is stored
in the m/8 previous positions, …, and the result of the last round (the
final) is stored in @win[0]@. The boolean of each position indicates if
the first player (the one with the smallest index) has won against the
second one.

This would be the table of results of the tournament previously
described:

[image]

For the example tournament, the answer should be “Borg”.

Observation

You only need to submit the required procedure; your main program will
be ignored.

Problem information

Author: Unknown
Translator: Carlos Molina

Generation: 2026-01-25T11:44:22.379Z

© Jutge.org, 2006–2026.
https://jutge.org
