Plataforma: URI (BEECROWD)
Problema: 2663
Enunciado:
Em diversas competições acadêmicas, como a Olimpíada Brasileira de Informática (OBI), uma certa quantidade de competidores se classifica de uma fase para a fase seguinte, garantindo uma das vagas disponíveis. Entretanto, normalmente essa quantidade é variável, pois dada uma certa quantidade mínima de classificados, é frequente que haja empate na última vaga de classificação. Neste caso, é comum que todos os competidores empatados na última colocação se classifiquem.
Sua tarefa é ajudar a calcular o número de competidores classificados para a próxima fase. Você receberá uma lista de pontuações obtidas pelos competidores e o número mínimo de vagas para a fase seguinte e você deve decidir quantos competidores de fato vão se classificar.
Linguagens: C e C++
Solução:
Código em C:
#include <stdio.h> #include <stdlib.h> int compara(const void *a, const void *b) { return (*(int *) b - *(int *) a); } int main() { int n, k, i = 0; scanf("%i %i", &n, &k); int comp[n]; while (i < n) scanf("%i", &comp[i++]); qsort(comp, n, sizeof(int), compara); for (i = k-1; i < n && comp[i] == comp[k-1]; i++); printf("%i\n", i); return 0; }
#include <iostream> #include <algorithm> #include <vector> using namespace std; bool compara(int a, int b) { return (a > b); } int main() { int n, k, valor, i = 0; vector<int> comp; cin >> n >> k; while (i++ < n) { cin >> valor; comp.push_back(valor); } sort(comp.begin(), comp.end(), compara); for (i = k-1; i < comp.size() && comp.at(i) == comp.at(k-1); i++); cout << i << endl; return 0; }