Created
May 21, 2024 15:07
-
-
Save pauek/911f4c78027df4ed21ac2dc9ab56142f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <cassert> | |
| #include <iostream> | |
| #include <vector> | |
| using namespace std; | |
| const int IDX_ESCOLA_START = 1000; | |
| const int IDX_ESCOLA_END = 2899; | |
| const int TOTAL_ESCOLES = IDX_ESCOLA_END - IDX_ESCOLA_START + 1; | |
| const int NUM_PREFERIDES = 3; | |
| const int MAX_PLACES = 50; | |
| struct DNI { | |
| int numero; | |
| char lletra; | |
| }; | |
| struct Solicitud { | |
| DNI dni; | |
| vector<int> escoles; | |
| bool sense_plasa; | |
| }; | |
| struct Escola { | |
| vector<DNI> inscrits; | |
| }; | |
| DNI llegeix_dni() { | |
| DNI dni; | |
| cin >> dni.numero >> dni.lletra; | |
| return dni; | |
| } | |
| int llegeix_index() { | |
| int pos; | |
| cin >> pos; | |
| return pos - 1; | |
| } | |
| vector<int> llegeix_escoles_preferides() { | |
| vector<int> escoles(NUM_PREFERIDES); | |
| for (int i = 0; i < NUM_PREFERIDES; i++) { | |
| cin >> escoles[i]; | |
| } | |
| return escoles; | |
| } | |
| vector<Solicitud> llegeix_solicituds(int N) { | |
| vector<Solicitud> solicituds(N); | |
| for (int i = 0; i < N; i++) { | |
| const DNI dni = llegeix_dni(); | |
| const int index = llegeix_index(); | |
| assert(index >= 0 && index < solicituds.size()); | |
| Solicitud& solicitud = solicituds[index]; | |
| solicitud.dni = dni; | |
| solicitud.escoles = llegeix_escoles_preferides(); | |
| solicitud.sense_plasa = false; | |
| } | |
| return solicituds; | |
| } | |
| bool inscriu(Solicitud& solicitud, vector<Escola>& escoles) { | |
| for (int i = 0; i < NUM_PREFERIDES; i++) { | |
| const int idx_esc = solicitud.escoles[i] - IDX_ESCOLA_START; | |
| if (idx_esc >= 0 && idx_esc < escoles.size()) { | |
| Escola& escola = escoles[idx_esc]; | |
| if (escola.inscrits.size() < MAX_PLACES) { | |
| escola.inscrits.push_back(solicitud.dni); | |
| return true; | |
| } | |
| } | |
| } | |
| solicitud.sense_plasa = true; | |
| return false; | |
| } | |
| int processa_solicituds(int N, | |
| int R, | |
| vector<Solicitud>& solicituds, | |
| vector<Escola>& escoles) { | |
| int num_sense_plasa = 0; | |
| for (int i = 0; i < N; i++) { | |
| const int index = (R + i) % N; | |
| assert(index >= 0 && index < solicituds.size()); | |
| Solicitud& solicitud = solicituds[index]; | |
| if (!inscriu(solicitud, escoles)) { | |
| num_sense_plasa++; | |
| } | |
| } | |
| return num_sense_plasa; | |
| } | |
| void escriu_dni(const DNI& dni) { | |
| cout << dni.numero << dni.lletra << endl; | |
| } | |
| void escriu_inscrits(int codi, const Escola& escola) { | |
| cout << "> Escola " << codi << ":" << endl; | |
| for (int i = 0; i < escola.inscrits.size(); i++) { | |
| escriu_dni(escola.inscrits[i]); | |
| } | |
| cout << endl; | |
| } | |
| void escriu_escoles(const vector<Escola>& escoles) { | |
| for (int i = 0; i < escoles.size(); i++) { | |
| const int codi = i + IDX_ESCOLA_START; | |
| const Escola& escola = escoles[i]; | |
| if (!escola.inscrits.empty()) { | |
| escriu_inscrits(codi, escola); | |
| } | |
| } | |
| } | |
| void escriu_sense_plasa(const vector<Solicitud>& solicituds) { | |
| cout << "> Sense escola per ara:" << endl; | |
| for (int i = 0; i < solicituds.size(); i++) { | |
| const Solicitud& solicitud = solicituds[i]; | |
| if (solicitud.sense_plasa) { | |
| cout << i+1 << ' '; | |
| escriu_dni(solicitud.dni); | |
| } | |
| } | |
| } | |
| int main() { | |
| int N; | |
| cin >> N; | |
| vector<Solicitud> solicituds = llegeix_solicituds(N); | |
| const int R = llegeix_index(); | |
| assert(R >= 0 && R < N); | |
| vector<Escola> escoles(TOTAL_ESCOLES); | |
| int num_sense_plasa = processa_solicituds(N, R, solicituds, escoles); | |
| escriu_escoles(escoles); | |
| if (num_sense_plasa > 0) { | |
| escriu_sense_plasa(solicituds); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment