F013A. Matagalls-Montserrat P35487


Statement
 

pdf   zip

Una coneguda caminada popular és molt dura, i alguns dels inscrits no la poden acabar. D’altra banda, n’hi ha que hi participen sense haver-s’hi inscrit.

Els organitzadors disposen d’aquesta informació:

  • Una llista L1L_1 amb els noms dels qui van acabar (estiguessin inscrits o no), junt amb l’hora d’arribada. Aquesta llista està ordenada per nom, i totes les hores són diferents.

  • Una llista desordenada L2L_2 amb el dni i el nom dels participants inscrits. Cap dels noms i cap dels dnis no està repetit.

Feu un programa que, per a cada participant de L2L_2, identificat pel seu dni, escrigui la seva hora d’arribada. Cal tenir en compte:

  • Alguns dels inscrits de L2L_2 no aconsegueixen acabar. En aquest cas, no apareixen a L1L_1.

  • Si acaben dos o més participants amb el mateix nom, i algun d’ells estava a L2L_2, llavors no és possible conèixer amb certesa la seva hora d’arribada.

  • Si un nom de L2L_2 apareix un cop a L1L_1, se suposa que es correspon a la mateixa persona.

Per resoldre aquest problema, useu la definició següent:

    struct Info {
        string nom, hora;
    };

Usant aquesta definició, implementeu i useu una funció eficient

    string busca(string nom, const vector<Info>& v) {

que retorni l’hora corresponent a nom dins de la taula ordenada per nom v. Si nom hi està repetit, cal retornar "???". Si nom no hi és, cal retornar "ABANDONA". Aquesta v ha de contenir tota la informació de la L1L_1 de l’entrada, noms repetits inclosos.

Entrada

L’entrada té L1L_1 i L2L_2 separades amb una línia en blanc. L1L_1 comença amb un natural nn, i segueix amb nn línies, cadascuna amb un nom i una hora. L2L_2 té una sèrie de parells dni nom. L1L_1 està ordenada per nom. Aquest és l’únic camp de l’entrada amb possibles repetits. Per comoditat, tracteu tota l’entrada (excepte nn) com si fossin strings.

Sortida

Per a cada dni de cada línia de L2L_2, escriviu una línia amb la seva hora d’arribada, "???" o bé "ABANDONA" segons convingui. Segui el format dels exemples.

Observació

El vostre programa ha de ser eficient. Les solucions que no ho siguin seran rebutjades, ja sigui directament pel Jutge o en la posterior correcció manual.

Public test cases
  • Input

    12
    amalia 20:30:23
    antoni 08:00:04
    carles 12:45:32
    carles 15:20:00
    carles 10:10:12
    edgar 13:30:48
    marta 14:00:59
    pepito 18:30:56
    pepito 18:25:15
    quim 17:30:18
    rafel 11:25:34
    rafel 11:30:10
    
    33333333 edgar
    11111111 pep
    22222222 antoni
    00001234 carles
    12345678 xavier
    40000000 marta
    77777777 alicia
    88888888 rafel
    44444444 amalia
    

    Output

    33333333 13:30:48
    11111111 ABANDONA
    22222222 08:00:04
    00001234 ???
    12345678 ABANDONA
    40000000 14:00:59
    77777777 ABANDONA
    88888888 ???
    44444444 20:30:23
    
  • Input

    0
    
    22222222 rigoberta
    00000000 bonifacia
    11111111 segismunda
    

    Output

    22222222 ABANDONA
    00000000 ABANDONA
    11111111 ABANDONA
    
  • Input

    1
    arnau 15:03:20
    

    Output

    
            
                                
  • Input

    0
    

    Output

    
            
                                
  • Information
    Author
    Professorat de P1
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++