Comentário por Anita Ramos, Thiago Mota e Pedro Racchetti
Para conferir a prova na íntegra, clique aqui.
Divisão do Tesouro
Conhecimento prévio necessário:
Esse é um problema bem simples, que pode ser resolvido apenas com leitura, impressão e uma lógica. A lógica funcionará assim: contaremos o capitão como 2 outros marinheiros. Assim, dividiremos o total do tesouro por para descobrir quanto cada marinheiro ganhará e depois dobrar o valor para o capitão. Por exemplo, se pensarmos em e , temos o seguinte:
- Cada marinheiro deve receber
- O capitão deve receber
Perceba que o capitão conta como dois outros marinheiros. Se dividirmos por (capitão), teremos 1. Por fim, dobramos esse valor para o capitão, ficando com 1 para cada marinheiro e 2 para o capitão.
Na parte da programação então, depois de declarar as variáveis e ler toda a entrada, dividimos por e dobramos o valor (x2). Assim, o cálculo geral fica:
Complexidade: .
Segue o código comentado para melhor compreensão da solução:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> //biblioteca utilizada | |
using namespace std; | |
int main() | |
{ | |
int A,N; //declaração de variáveis | |
scanf("%d", &A); //leitura do 'A' | |
scanf("%d", &N); //leitura do 'N' | |
printf("%d", 2*(A/(N+2))); //imprimi a resposta do cálculo de 2*(A/(N+2)) | |
return 0; //retorna a 0 | |
} |
Três por Dois
Conhecimento prévio necessário:
Vamos olhar para o seguinte caso: . Para reduzir o preço total dos chocolates temos que tentar remover da nossa soma o maior elemento possível; para isso, vamos agrupar os três maiores elementos . Através deles é possível notar que sempre teremos que pagar os dois maiores chocolates (que, nesse caso, são os chocolates ), pois não existe nenhuma maneira de juntar três elementos de tal forma que o menor deles seja ou o ou o . Assim, a melhor opção é remover o e pagarmos apenas nesse grupo, restando no vetor os chocolates .
Podemos aplicar esse algoritmo novamente e pegar os três maiores elementos do vetor restante e remover o menor entre eles, pagando nesse grupo o valor de ; somando os dois grupos temos, no total, .
Caso o restante do nosso vetor tenha apenas um ou dois elementos, a nossa única opção é pagar eles. Isso ocorre pois não existe nenhuma maneira de conseguir descontos com menos de chocolates.
Segue o código:
Emoticons
Conhecimento prévio necessário:
Para esse problema, basta passarmos por todas as strings fornecidas, e verificarmos a quantidade de emoticons, como descrito no problema, nelas.
Para isso, podemos usar um laço para encontrar as strings, e encadeado nesse laço um laço para passar pelas strings, e verificar se existe algum caractere nessa string é um , e é seguido por , e caso seguido por aumentaremos o número de emoticons felizes, caso seguido por aumentaremos o número de emoticons tristes. No final, basta comparar os números de cada tipo de emoticon.
Complexidade: .
Segue o código, comentado, para melhor compreensão da solução!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> | |
using namespace std; | |
//aqui declaramos as variáveis que precisaremos no programa | |
string s; | |
int numfeliz, numtriste; | |
int main(){ | |
while(cin >> s){ //a funcao de entrada cin retorna falso quando não consegue mais ler | |
if(s.length() < 3) continue; //se essa palavra tem menos de tres caracteres, | |
//essa palavra com certeza não é um emoticon | |
for(int i = 0; i < s.length() - 2; i++){ | |
if(s[i] == ':' && s[i+1] == '-' && s[i+2] == ')' ) numfeliz++; | |
//somamos um no numero de emoticons felizes | |
if(s[i] == ':' && s[i+1] == '-' && s[i+2] == '(' ) numtriste++; | |
//somamos um no numero de emoticons tristes | |
} | |
} | |
//comparamos os numeros de emoticons | |
if(numfeliz == numtriste) cout << "neutro" << endl; | |
else if(numfeliz > numtriste) cout << "divertido" << endl; | |
else cout << "chateado" << endl; | |
} |