Torneig de tennis P73160


Statement
 

pdf   zip   main.cc

Considereu un torneig de tennis amb mm participants, amb noms x1,x2,,xmx_1, x_2, \dots, x_m, on mm és una potència de dos. A la primera ronda, x1x_1 juga contra x2x_2, x3x_3 juga contra x4x_4, …, i xm1x_{m - 1} juga contra xmx_m. Els jugadors que perden queden eliminats, i el procés es repeteix amb els jugadors restants. Quan només queda un jugador, aquest és el guanyador del torneig.

Per exemple, sigui m=8m = 8, i suposem que a la primera ronda x1x_1 ha guanyat a x2x_2, x3x_3 ha perdut amb x4x_4, x5x_5 ha guanyat a x6x_6, i x7x_7 ha guanyat a x8x_8. A la segona ronda x1x_1 i x4x_4 s’enfronten entre si (suposem que guanya x4x_4), i x5x_5 i x7x_7 s’enfronten entre si (suposem que guanya x7x_7). A la tercera i última ronda x4x_4 i x7x_7 s’enfronten entre si. Suposant que guanyi x4x_4, aquest és el campió. La figura següent mostra el campionat tot just descrit en forma d’arbre:

image

Cal que feu un procediment que, donats els noms dels jugadors i la taula de resultats, retorni el nom del guanyador del torneig:

    string guanyador(const vector<string>& nom, const vector<bool>& guanya);

El vector @nom@ té mida mm, on mm és qualsevol potència de 2. Per a cada @j@ entre 0 i m1m - 1, es té @nom[j]@ =xj+1= x_{\mbox{j} + 1}. Tots els noms són diferents.

Per exemple, aquesta podria ser la taula de noms del torneig descrit anteriorment:

image

El vector @guanya@ té mida m1m - 1 i conté els resultats dels partits en el format següent: la primera ronda es guarda a les últimes m/2m/2 posicions, la segona ronda es guarda a les m/4m/4 posicions anteriors, la tercera ronda es guarda a les m/8m/8 posicions anteriors, …, i el resultat de l’última roda (la final) es guarda a @guanya[0]@. El booleà de cada posició indica si el primer jugador (el de menor índex) ha guanyat al segon.

Aquesta seria la taula de resultats del torneig descrit anteriorment:

image

Per al torneig d’exemple, la resposta hauria de ser “Borg”.

Observació

Només cal enviar el procediment demanat; el programa principal serà ignorat.

Information
Author
Salvador Roura
Language
Catalan
Other languages
English
Official solutions
C++
User solutions
C++