Plataforma: URI (BEECROWD)
Problema: 3176
Linguagens: C e C++
Enunciado:
No ano de 2020 o Papai Noel não poderá sair de casa para entregar presentes por conta da pandemia do Coronavirus. Então ele ordenou que seus duendes fossem entregar no lugar dele no dia do natal. Como eles são bastante inexperientes, irão se dividir em vários times compostos de três membros: Um líder, um entregador e um piloto de trenó. O plano do Papai Noel é que os líderes das equipes seja sempre os duendes mais velhos, por esse motivo ele pediu para todos escreverem seus nomes e idades em uma lista. Como você é um duende programador, resolveu ajudar o Papai Noel a organizar a lista e montar os times a partir dela.
Segue abaixo algumas regras e fatos:
- A lista deve ser organizada em ordem descendente de idade;
- Caso dois duendes possuírem a mesma idade, deve se organizar por ordem ascendente de nome;
- Não existe dois duendes de mesmo nome;
- Nenhum duende tem mais de 20 caracteres em seu nome;
- Os duendes da lista tem idade entre 10 e 100 anos;
- Os primeiros 1/3 dos duendes (os mais velhos), serão os líderes dos times;
- A ordem dos duendes entregadores e pilotos seguem a mesma lógica dos líderes. Ex) Se há 6 duendes na lista, haverá dois times, onde o duende mais velho é líder do time 1, e o segundo mais velho é líder do time 2. O terceiro mais velho é entregador do time 1 e o quarto mais velho é entregador do time 2. O quinto é piloto de trenó do time 1 e o último é piloto do time 2;
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct { int age; char name[22]; } Duende; int compara(const void *a, const void *b) { Duende *a2 = (Duende *)a; Duende *b2 = (Duende *)b; if (a2->age == b2-> age) return strcmp(a2->name, b2->name); return a2->age < b2->age; } int main() { int n, i, idade, times, k; char nome[22]; Duende hue[30]; scanf("%d ", &n); times = n/3; for (i = 0; i < n; i++) { scanf("%s %d", nome, &idade); strcpy(hue[i].name, nome); hue[i].age = idade; } qsort ((void *)&hue, n, sizeof(Duende), compara); for (i = 0; i < times; i++) { printf("Time %d\n", i + 1); for (k = i; k < n; k += times) printf("%s %d\n", hue[k].name, hue[k].age); printf("\n"); } return 0; }
#include <algorithm> #include <iostream> #include <string> #include <vector> using namespace std; struct Duende { int age; string name; }; bool compara(Duende a, Duende b) { if (a.age == b.age) return a.name <= b.name; return a.age > b.age; } int main() { int n, i, idade, times, k; string nome; Duende hue[30]; cin >> n; times = n/3; cin.ignore(); for (i = 0; i < n; i++) { cin >> nome >> idade; hue[i].name = nome; hue[i].age = idade; } sort(hue, hue + n, compara); for (i = 0; i < times; i++) { cout << "Time " << i + 1 << endl; for (k = i; k < n; k+=times) { cout << hue[k].name << " " << hue[k].age << endl; } cout << endl; } return 0; }