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

por

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:

https://gist.github.com/PedroRacchetti/a7aacaef64aec8b1b177cf6c6eb61aac