Pra quem não conhece a estrutura set, esse exercício é uma boa oportunidade de conhecer! Além de ajudar muito, o set (ou conjunto disjunto) trabalha da mesma forma que os conjuntos matemáticos, aqueles mesmos que aprendemos no ensino fundamental. Bora ver a solução?
Antes de resolver qualquer algoritmo do URI (BEECROWD agora), recomendamos seguir os seguintes passos:
- Ler todo enunciado do problema.
- Ler os tópicos do fórum em caso de dúvidas
- Preparar arquivos de entrada para teste, considerando as entradas de exemplo do URI, do udebug e outros valores limite;
- Preparar o ambiente de desenvolvimento e utilizar os mesmos parâmetros dos compiladores do URI
- Preparar um código-fonte padrão, já contendo a chamada às bibliotecas padrão, pré-processadores, retorno de função e um comando de escrita com "\n", pois no URI a grande maioria dos problemas exige a quebra de linha final.
Plataforma: URI (BEECROWD)
Problema: 2174
Enunciado:
Desde que foi lançado oficialmente o Pomekon no Brasil, Dabriel está tentando realizar seu maior sonho: Ser um Mestre Pomekon. Sua meta é conquistar os 151 Pomekons disponíveis. Ele já conseguiu capturar muitos monstrinhos, porém em sua cidade aparecem muitos Pomekons repetidos, fazendo com que ele capture diversas vezes o mesmo Pomekon.
Vendo que sua mochila está bem cheia, Dabriel pediu para que você fizesse um programa de computador que informasse a ele quantos Pomekons faltam para completar a coleção.
Linguagens: C e C++
Solução em C:
A ideia é armazenar os pomekons em uma matriz de caracteres, ou seja, o que seria um array de palavras. No entanto, essa solução pura permitiria contar pomekons duplicados. Portanto, realizou-se a ordenação do array de palavras em ordem alfabética e comparou-se, assim, cada pomekon com o pomekon anterior. Se os nomes fossem diferentes, incrementa o contador (variável "r"). A resposta final é a subtração 151 - r, ou seja, 151 menos o total de pomekons diferentes lidos pelo programa.
Observações: Quicksort é um algoritmo de ordenação estável, disponível na biblioteca stdlib através da função qsort. Caso prefira, você pode implementar sua própria função de ordenação para resolver este exercício. A função strcmp realiza a comparação entre duas cadeias de caracteres.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 1010 int compara(const void *p1, const void *p2) { return strcmp(p1, p2); } int main() { unsigned int n, i, r = 1; char pomekon[MAX][MAX]; scanf("%u", &n); for (i = 0; i < n; i++) scanf("%s", pomekon[i]); qsort(pomekon, n, MAX, compara); for (i = 1; i < n; i++) { if (strcmp(pomekon[i-1], pomekon[i])) r++; } printf("Falta(m) %u pomekon(s).\n", 151 - r); return 0; }
#include <iostream> #include <set> using namespace std; int main() { unsigned int n; string pomekon; set<string> pomekons; cin >> n; while (n--) { cin >> pomekon; pomekons.insert(pomekon); } cout << "Falta(m) " << 151 - pomekons.size() << " pomekon(s)." << endl; return 0; }
Boa noite, não achei o contato do site de vocês em nenhum lugar, então gostaria de contribuir com o URI 1400 em c, pois me foi pedido e eu tive dificuldades de encontrar a resposta, segue abaixo::
ResponderExcluirURI 1400
#include
#include
#include
#define sc3(a,b,c) scanf("%d %d %d", &a, &b, &c)
#define for(i,a,n) for(int (i) = (a); (i) < (n); (i)++)
bool clap(int n)
{
if(n % 7 == 0)
return true;
while (n)
{
int r = n % 10;
n /= 10;
if (r == 7)
return true;
}
return false;
}
int main(void)
{
int n, m, k, p, agr, v;
while(sc3(n,m,k) && (n || m || k))
{
p = v = 1;
agr = 0;
while(1)
{
agr++;
if(p == m && clap(agr)){
k--;
if(k == 0){
printf("%d\n", agr);
break;
}
}
p += v;
if (p > n) {
p = n - 1;
v = -1;
} else if (p == 0){
p = 2;
v = 1;
}
}
}
return 0;
}