Plataforma: URI (BEECROWD)
Problema: 3161
Linguagens: C e C++
Enunciado:
Sheldon Cooper é um personagem excêntrico existente no universo de Hollywood. Recentemente ele sofreu um acidente e acabou esquecendo quais frutas gosta de comer. Contudo, é chegada a hora de preparar o café da manhã e Sheldon não quer passar pela experiência de provar uma fruta e descobrir que não gosta dela. Então, incomodado com essa situação, Sheldon convenceu seu amigo Leonard Hofstadter a lhe ajudar. Leonard lembra do momento que conheceu Sheldon e devido as excentricidades de seu amigo, ele guardou em seu computador uma lista com o nome das frutas que Sheldon gosta de comer. Leonard muito animado com sua sagacidade, abre o arquivo e observa que algo está errado: o conteúdo do arquivo foi embaralhado por um vírus de computador.
Determinado a resolve essa questão, Leonard fez experimentos e concluiu que é possível ler o conteúdo do arquivo e descobrir se Sheldon gosta ou não de uma dada fruta. Pelos experimentos, Leonard observou que o vírus fez alguma(s) das seguintes alterações: 1) Incluiu novos caracteres à esquerda e/ou à direita ao nome da fruta que estava na lista; 2) Alterou algumas letras, neste caso, algumas se tornaram maiúsculas e outras minúsculas; 3) O nome da fruta que estava na lista foi invertido ("Bergamota" => "Atomagreb"). Como Leonard estudou programação, ele irá criar um programa que recebe o nome de uma fruta e retorna se Sheldon gosta ou não dessa fruta.
#include <ctype.h> #include <stdio.h> #include <string.h> #define TAM 110 int main() { int n, m, lock, i, j; char s[TAM], q[TAM], f[TAM], fruta[TAM][TAM], lista[TAM*5][TAM], temp[TAM], a[TAM]; scanf("%d %d ", &n, &m); for (i = 0; i < n; i++) { fgets(s, TAM, stdin); for(j = 0; j < strlen(s)-1; j++) fruta[i][j] = tolower(s[j]); } for (i = 0; i < 2 * m; i++) { fgets(q, TAM, stdin); for(j = 0; j < strlen(q)-1; j++) lista[i][j] = tolower(q[j]); for(j = 0; j < strlen(q)-1; j++) temp[j] = tolower(q[strlen(q)-2-j]); temp[j] = '\0'; strcpy(lista[++i], temp); } for (j = 0; j < n; j++) { strcpy(f, fruta[j]); lock = 0; for (i = 0; i < 2 * m; i++) { strcpy(a, lista[i]); if (strstr(a, f) != NULL && !lock) lock = 1; } if (lock) printf("Sheldon come a fruta %s\n", f); else printf("Sheldon detesta a fruta %s\n", f); } return 0; }
#include <algorithm> #include <iostream> #include <string> #include <vector> using namespace std; int main() { int n, m; string s, q, f; vector<string> fruta; vector<string> lista; bool lock; cin >> n >> m; cin.ignore(); while (n--) { getline(cin, s); transform(s.begin(), s.end(), s.begin(), ::tolower); fruta.push_back(s); } while (m--) { getline(cin, q); transform(q.begin(), q.end(), q.begin(), ::tolower); lista.push_back(q); reverse(q.begin(), q.end()); lista.push_back(q); } for (int j = 0; j < fruta.size(); j++) { f = fruta.at(j); lock = false; for (int i = 0; i < lista.size(); i++) { string a = lista.at(i); if (a.find(f) != std::string::npos && !lock) lock = true; } if (lock) cout << "Sheldon come a fruta " << nouppercase << f << endl; else cout << "Sheldon detesta a fruta " << nouppercase<< f << endl; } return 0; }