Este problema se resume a encontrar o k-ésimo menor elemento em um vetor, onde o k é dado pelo enunciado. Para este problema em específico temos algumas soluções viáveis com suas respectivas complexidades, mas por questão de simplicidade, aqui só vou colocar a mais simples. Mas só à caráter expositivo, as soluções mais eficientes envolvem heaps e até mesmo um algoritmo linear chamado QuickSelect.
Mas, bem, a solução mais simples é ordenar o vetor e escolher o k-ésimo elemento.
Complexidades
Termo assintótico
Tempo
O(n log n) para a ordenação
Espaço adicional
O(1)
Normalmente essa é a primeira maneira que a gente pensa para resolver o problema. São duas simples etapas:
Ordenar o vetor
Retornar o k-ésimo elemento do vetor ordenado
#include<stdio.h>#include<stdlib.h>#include<string.h>intcomp(constvoid* a,constvoid* b){returnstrcmp((char*)a,(char*)b);}intmain(void) {int K, N, i;char alunos[200][50];scanf("%d%d\n",&N,&K);for(i =0; i < N; ++i){scanf("%s",&alunos[i]); }qsort(alunos, N,sizeof(char) *50, comp);printf("%s\n", alunos[K -1]);return0;}
#include<algorithm>#include<iostream>#include<vector>usingnamespace std;intmain() {int N, K; vector<string> alunos; cin >> N >> K;alunos.assign(N,"");for(int i =0; i < N; ++i){ cin >>alunos[i]; }sort(alunos.begin(),alunos.end()); cout <<alunos[K -1] << endl;return0;}
importjava.util.Arrays;importjava.util.ArrayList;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{publicstaticvoidmain (String[] args) throwsIOException {InputStreamReader ir =newInputStreamReader(System.in);BufferedReader in =newBufferedReader(ir);String entrada[] =in.readLine().split(" ");int N =Integer.parseInt(entrada[0]);int K =Integer.parseInt(entrada[1]);String alunos[] =newString[N];for(int i =0; i < N; ++i){ alunos[i] =in.readLine(); }Arrays.sort(alunos);System.out.printf("%s\n", alunos[K -1]); }}
N, K = [int(x)for x ininput().split(' ')]alunos = [input()for _ inrange(N)]alunos.sort()print(alunos[K -1])
usingSystem;classURI {staticvoidMain() {string[] alunos;int N, K;string[] input =System.Console.ReadLine().Trim().Split(' '); N =Int32.Parse(input[0]); K =Int32.Parse(input[1]); alunos =newstring[N];for(var i =0; i < N; ++i){alunos[i] =System.Console.ReadLine().Trim(); }Array.Sort(alunos);System.Console.WriteLine(alunos[K -1]); }}