Geometria

Problema 1124

Descrição

A FCC (Fábrica de Cilindros de Carbono) fabrica vários tipos de cilindros de carbono. A FCC está instalada no décimo andar de um prédio, e utiliza os vários elevadores do prédio para transportar os cilindros. Por questão de segurança, os cilindros devem ser transportados na posição vertical; como são pesados, no máximo dois cilindros podem ser transportados em uma única viagem de elevador. Os elevadores têm formato de paralelepípedo e sempre têm altura maior que a altura dos cilindros.

Como existe uma quantidade muito grande de elevadores e de tipos de cilindros, a FCC quer que você escreva um programa que, dadas as dimensões do elevador e dos dois cilindros, determine se é possível colocar os dois cilindros no elevador.

Entrada

A entrada contém vários casos de teste. A primeira e única linha de cada caso de teste contém quatro números inteiros L, C, R1 e R2, separados por espaços em branco, indicando respectivamente a largura do elevador (1 ≤ L ≤ 100), o comprimento do elevador (1 ≤ C ≤ 100), e os raios dos cilindros (1 ≤ R1, R2 ≤ 100).
O último caso de teste é seguido por uma linha que contém quatro zeros separados por espaços em branco.

Saída

Para cada caso de teste, o seu programa deve imprimir uma única linha com um único caractere: ‘S’ se for possível colocar os dois cilindros no elevador e ‘N’ caso contrário. Exemplo de Entrada ------- Exemplo de Saída

11 9 2 3 ----------------- S

7 8 3 2 -------------------N

10 15 3 7 ---------------- N

8 9 3 2 ------------------ S

0 0 0 0

Código

#include <stdio.h>
#include <stdlib.h>

#include <math.h>

int main(){

float l, c, r1, r2;

float maior1, maior2, menor1, menor2, diagonal, di, resto1, resto2;

while(1){

scanf("%f%f%f%f",&l,&c,&r1,&r2);

maior1=l;

menor1=c;

maior2=2*r1;

menor2=2*r2;

diagonal=sqrt( ((c*c)+(l*l)));

if((l==0)&&(c==0)&&(r1==0)&&(r2==0)){

goto A;

}

if(l<c){

maior1=c;

menor1=l;

}

if(r1<r2){

maior2=2*r2;

menor2=2*r1;

}

resto1=menor2*sqrt(2)/4.0;

di=menor2+maior2+resto1;


if(((2*r1+2*r2)<=maior1)&&(maior2<=menor1)){

printf("S\n");

}

else if(maior2<=menor1){

if((di<=diagonal)){

printf("S\n");

}

else{

printf("N\n");

}


}

else{

printf("N\n");

}

}

A:

return 1;

}

Observações e explicações

Problema 1039

Descrição

Nos dias atuais uma flor de fogo não é algo considerado estranho para muitos jovens. Isso porque um famoso jogo de videogame popularizou esse tipo de flor. Nesse jogo o protagonista ganhava superpoderes ao tocar em uma flor de fogo, passando a atirar pequenas bolas de fogo para derrotar seus inimigos.

No entanto, já se falava sobre flores de fogo há muito tempo atrás. Na mitologia polonesa, flores de fogo são flores místicas de grande poder guardadas por espíritos malignos. Ela possuía esse nome porque brilhava tanto que era impossível olhá-la diretamente. Quem possuísse uma flor dessas ganharia a habilidade de ler a mente de outras pessoas, encontrar tesouros escondidos e repelir todos os males.

Para obter uma flor de fogo, a pessoa deveria procurá-la em uma floresta antes da meia-noite na véspera do Noc Kupały. Exatamente à meia-noite ela floresceria. Para colhê-la seria preciso desenhar um círculo em volta dela. Parece uma tarefa fácil, no entanto, os espíritos malignos que guardam a flor tentariam de tudo para distrair qualquer um tentando colher a flor. Se a pessoa falhasse ao tentar desenhar um círculo em volta da flor, teria sua vida sacrificada.

Dados dois círculo, um desenhado por um ambicioso caçador de flores de fogo e outro representando a área da flor, sua tarefa é determinar se o caçador morre ou fica rico com sua conquista.


Entrada

A entrada é composta por diversas instâncias e termina com final de arquivo (EOF). Cada instância consiste em uma linha com seis inteiros, R1 (1 ≤ R1) , X1(|X1|), Y1(|Y1|), R2 (R2 ≤ 1000), X2(|X2|), Y2 (Y2 ≤ 1000). O círculo desenhado pelo caçador possui raio R1 e centro (X1; Y1). O círculo representando a área da flor possui raio R2 e centro (X2; Y2).

Saída

Para cada instância imprima uma única linha contendo MORTO, se o caçador morre, ou RICO se o caçador consegue colher a flor.

Exemplo de Entrada Exemplo de Saída

6 -8 2 3 0 0 ------------MORTO

7 3 4 2 4 5 -------------RICO

3 0 0 4 0 0 -------------MORTO

5 4 7 1 8 7 -------------RICO

Código

#include <iostream>
#include <math.h>
using namespace std;

int main(){

   float r1, x1, y1, r2, x2, y2;
   float distancia=0, d=0;
   float x, y, a;
   char b='a';
    

   while(cin>>r1>>x1>>y1>>r2>>x2>>y2){
       d=0;
       distancia=0;

       x=(x2-x1)*(x2-x1);
       y=(y2-y1)*(y2-y1);
       a=x+y;
       distancia=sqrt(a);
       d=distancia+r2;


       if(d<=r1){
           cout<<"RICO\n";
       }
       else{
           cout<<"MORTO\n";
       }
   }

A:

   return 1;

}

Observações e explicações