Plataforma: URI (BEECROWD)
Problema: 2635
Enunciado:
Lucas é um rapaz bem radical quando o assunto envolve licenças de software. Desde que começou sua graduação em engenharia da computação, ele procura desenvolver todas as ferramentas que necessita. Tudo isso começou após experiências ruins ao utilizar softwares proprietários. Agora, ele acredita que um programador de verdade deve ser autossuficiente, ou seja, deve construir todos os programas que precisa, desde uma simples calculadora até seu próprio sistema operacional.
Este semestre, Lucas está cursando a disciplina de desenvolvimento de sistemas web. Para continuar sua filosofia de vida, utilizando apenas softwares construı́dos por ele mesmo, Lucas já está programando seu próprio web browser. Grande parte do trabalho foi concluı́da, porém algumas funcionalidades ainda precisam ser finalizadas.
O navegador de Lucas possui um campo de busca onde o usuário poderá inserir uma palavra chave, e ao clicar em um botão de confirmação, ele será redirecionado para outra página com os resultados de sua pesquisa. Quando alguma string for digitada no campo de busca, Lucas quer que seu programa exiba, logo abaixo, algumas opções para auto completar esta string de acordo com as buscas já realizadas pelo usuário.
Por exemplo, se as palavras “algoritmos” e “algas” já foram pesquisadas, ao digitar a string “alg”, o programa deverá sugerir as palavras “algoritmos” e “algas”. Portanto, para cada string digitada, o programa deverá sugerir palavras pesquisadas anteriormente e que possuem como prefixo esta string. Caso alguma palavra seja igual a string digitada, ela também deve ser sugerida.
Lucas está preocupado com a quantidade de palavras que seu programa pode sugerir, além do tamanho máximo que elas podem alcançar. Por isso, ele pediu que você o ajude escrevendo um programa em que dadas algumas palavras já pesquisadas e uma série de consultas compostas por uma string, indique quantas palavras o navegador deverá sugerir ao usuário, além do comprimento da maior dessas palavras.
Linguagens: C e C++
Solução:
Código em C:
#include <stdio.h> #include <string.h> int main() { int n, q, i, wordSize, strSize, iguais, biggest; scanf("%d ", &n); char words[10000][110], str[110], temp[110]; for (i = 0; i < n; i++) scanf("%s", words[i]); scanf("%d ", &q); while (q--) { scanf("%s", str); strSize = strlen(str); iguais = 0; biggest = 0; for (i = 0; i < n; i++) { strncpy(temp, words[i], strSize); temp[strSize] = '\0'; if (!strcmp(temp, str)) { iguais++; wordSize = strlen(words[i]); if (wordSize > biggest) biggest = wordSize; } } if (iguais) printf("%d %d\n", iguais, biggest); else printf("-1\n"); } return 0; }
#include <iostream> #include <string> #include <vector> using namespace std; int main() { int n, q; cin >> n; vector<string> words; string str; for (int i = 0; i < n; i++) { cin >> str; words.push_back(str); } cin >> q; while (q--) { cin >> str; int strSize = str.size(); int iguais = 0; int biggest = 0; for (int i = 0; i < n; i++) { if (!words[i].substr(0, strSize).compare(str)) { iguais++; int wordSize = words[i].size(); if (wordSize > biggest) biggest = wordSize; } } if (iguais) cout << iguais << " " << biggest << endl; else cout << "-1" << endl; } return 0; }
Nenhum comentário:
Postar um comentário