Solução Informática - Nível Iniciante - Semana 1

Solução por Anita Almeida

Este problema trata-se de um problema básico de geometria. O seu programa deve apenas analisar se o círculo de raio 2 (o círculo que representa a área da flor) está dentro, ou seja, inscrito ao círculo de raio 1 (o círculo desenhado pelo caçador). Para isso, utilizaremos três  conceitos da matemática. O primeiro, chamado de Circunferências Internas, determina que para uma circunferência estar totalmente inscrita à outra é necessário que a distância entre seus centros seja menor que a diferença entre seus raios. O segundo, chamado de Tangente Interna, determina que para uma circunferência tangenciar internamente outra circunferência, a distância entre seus centros deve ser igual a diferença entre seus raios.

Como no problema é permitido que uma circunferência tangencie a outra, ou até tenha o mesmo centro e o mesmo raio, os dois conceitos devem ser utilizados, seguindo a seguinte fórmula: distância do centro 1 (C1) ao centro 2 (C2) é menor ou igual a raio 1 (R1) - raio 2 (R2), ou seja, d(C1, C2) \leq R1 - R2. Utilizando agora o terceiro e último conceito, para determinar a distância entre os centros de duas circunferências seguimos a seguinte fórmula: \sqrt{(X1 - X2)^2 + (Y1 - Y2)^2}, sendo X1 e Y1 as coordenadas do C1 e X2 e Y2 as coordenadas do C2. Assim, a equação citada anteriormente, que relaciona os raios com a distâncias dos centros das circunferências pode ser desenvolvida como: \sqrt{(X1 - X2)^2 + (Y1 - Y2)^2}\leq R1 - R2. Para simplificar, chamaremos o lado esquerdo da equação de XY, sendo assim: XY \leq R1 - R2 (Equação 1).

Iniciando a programação então, após adicionar as bibliotecas e declarar as variáveis (lembrando que todas devem ser declaradas como "int" com exceção do XY que pode não ser inteiro por conta da raiz quadrada, por isso utilizamos o tipo "float"), é necessário receber/ler as variáveis de entrada até o EOF - End of File. Para isso utilizamos um loop que leia as variáveis (cin>>) até ser determinado EOF. Em seguida, iniciamos a parte de cálculos.

O cálculo 1 (como comentado na programação abaixo), apenas atribui o valor da distância dos centros C1 e C2 a XY, ou seja, XY = \sqrt{(X1-X2)^2 + (Y1-Y2)^2}. Apenas como observação, a função de raiz é a sqrt(). O cálculo 2 (como comentado na programação abaixo), entra como a condição de todo o problema, sendo equivalente a Equação 1, ou seja, a condição para determinar o "RICO" ou o "MORTO" é satisfazer ou não a equação XY \leq R1 - R2. Se essa condição for satisfeita, significa que a flor está dentro do círculo feito pelo caçador e, assim, a saída deve ser "RICO". Se essa condição não for satisfeita, significa que a flor não está totalmente dentro do círculo feito pelo caçador e, assim, a saída deve ser "MORTO". Por fim, o programa retorna a 0 após todos os testes.

Segue o código comentado para melhor compreensão da solução:


#include<bits/stdc++.h> //biblioteca utilizada
#include <cmath> //biblioteca utilizada
using namespace std;
int main()
{
int R1, X1, Y1, R2, X2, Y2; //declaração das variáveis que compõem
float XY; //declaração da variável utilizada na lógica
while(cin >> R1 >> X1 >> Y1 >> R2 >> X2 >> Y2) //loop para ler todas as variáveis de entrada
{
XY = sqrt(((X2 - X1) * (X2 - X1)) + ((Y2 - Y1) * (Y2 - Y1))); //cálculo 1
if(XY<=(R1-R2)) //condição cálculo 2
{
cout << "RICO" << endl; //consequência
}
else //condição do cáculo 2 negada
{
cout << "MORTO" << endl; //consequência
}
}
return 0; //zera a programação
}