Sous desorbitats P44556


Statement
 

pdf   zip   main.cc

html

La gestió nefasta d’un club esportiu ha provocat que alguns dels seus esportistes professionals tinguin sous desorbitats. Implementeu la funció

void split(const BD& data, const Fitxa& f, vector<string>& up, vector<string>& down);

que, a partir d’una base de dades data que conté les fitxes dels esportistes ordenades decreixenment per nivell d’absurditat, i donada la fitxa f d’un d’aquests esportistes, retorna dos vectors de textos up i down, on up conté els noms dels esportistes amb fitxes mes absurdes que f, i down conté els noms dels esportistes amb fitxes menys absurdes que f, ambdós en el mateix ordre en què apareixen a data.

Cada fitxa consta d’un identificador únic (un enter), el nom de l’esportista (un text), i una llista no buida de rebuts de nòmina (un vector d’enters).

struct Fitxa { int id; string nom; vector<int> nomines; }

Es considera que una fitxa f1 és mes absurda que una fitxa f2 si, o bé el sou total de f1 és mes gran que el sou total de f2, o bé els sous totals són iguals però f1 conté menys rebuts de nòmina que f2, o bé coincideixen en aquestes dues coses però les fitxes no tenen exactament els mateixos rebuts de nòmina i, al primer rebut en què les quantitats difereixen, la quantitat de f1 és mes gran que la de f2. En cas que les fitxes coincideixin en tots els rebuts de nòmina, es considera que f1 és mes absurda que f2 si l’identificador de f1 és mes petit que l’identificador de f2.

La base de dades és un vector de fitxes ordenat decreixenment per nivell d’absurditat:

using BD = vector<Fitxa>;

Per ajudar-vos a resoldre el problema, descarregueu el fitxer code.cc disponible a la pàgina de l’enunciat. Hi trobareu el programa principal main() que s’encarrega de tota la gerstió de l’entrada/sortida i de la crida a split(). Per fer proves, podeu fer servir l’exemple que us proposem. La sortida conté el número total de fitxes, el número de fitxes mes absurdes que la fitxa donada, el número de fitxes menys absurdes que la fitxa donada, seguit dels noms a up i down.

A més, també us oferim un tros de codi que implementa una cerca dicotòmica en un vector d’enters ordenat creixentment. Si ho trobeu necessari, adapteu-lo al vostre problema.

Public test cases
  • Input

    3 Pique 2 2500000 2500000
    
    14 Coutinho 1 5000000
    3 Pique 2 2500000 2500000
    22 Mingueza 12 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
    78 Abde 6 2000 2000 2000 2000 2000 1000
    8 Nico 6 2000 2000 1000 2000 2000 2000
    30 Gavi 6 2000 2000 1000 2000 2000 2000
    

    Output

    6 1 4
    
    Coutinho
    
    Mingueza
    Abde
    Nico
    Gavi
    
  • Information
    Author
    Albert Atserias
    Language
    Catalan
    Official solutions
    C++
    User solutions
    C++ Python