Pesquisar este blog

Livros Recomendados

sábado, 25 de abril de 2020

URI - 1244 - Ordenação por Tamanho - Estruturas - C++

Plataforma: URI
Problema1244

Enunciado
Crie um programa para ordenar um conjunto de strings pelo seu tamanho. Seu programa deve receber um conjunto de strings e retornar este mesmo conjunto ordenado pelo tamanho das palavras, se o tamanho das strings for igual, deve-se manter a ordem original do conjunto.

Linguagem: C++

Solução:
Para cada linha lida, foi buscado por um espaço em branco. Ao encontrar o espaço em branco, as substrings compondo aquela palavra foram adicionadas a um vetor chamado vet, juntamente com seu tamanho.
Após ter percorrido toda a linha, foi aplicada uma ordenação, onde a função stable_sort foi sobrecarregada para ordenar do maior para o menor. Além disso, foi utilizada a função stable_sort ao invés de apenas sort para manter a ordenação original em duas palavras de mesmo tamanho.
Posteriormente, foi impresso apenas as palavras do vetor ordenado.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

bool sortInverse(const pair<int,string> &a, const pair<int,string> &b){ 
    return (a.first > b.first); 
} 

int main(){
 int n, i, string_size;
 string linha;
 vector< pair <int, string> > vet;
 cin >> n;
 getline(cin, linha);
 while(n--){
  vet.clear();  
  getline(cin, linha);
  int pos_ini = 0;
  
  for(i=0; i<linha.size(); i++){
   if(linha[i]==' '){
    string_size = i-pos_ini;
    string substring = linha.substr(pos_ini, string_size);
    vet.push_back(make_pair(string_size, substring));
    pos_ini = i+1;
   }
  }
  string_size = i-pos_ini;
  string substring = linha.substr(pos_ini, string_size);
  vet.push_back(make_pair(string_size, substring));
  
  stable_sort(vet.begin(),vet.end(),sortInverse);

  cout << vet.at(0).second;
  for(int i=1;i<vet.size();i++){
   cout << " " << vet.at(i).second;
  }
  cout << endl;
  
 }
 return 0;
}

Nenhum comentário:

Postar um comentário

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas