Solução Jogo de Varetas - Semana 1

Solução por Rogério Júnior

Sempre que temos dois pares de varetas iguais, podemos formar um retângulo, usando varetas iguais para formarmos os lados opostos. Assim, basta que saibamos a quantidade n de pares de lados iguais e a quantidade de retângulos será \lfloor{\frac{n}{2}}\rfloor, pois para cada dois pares poderemos fazer um novo retângulo.

Vamos criar uma variável inteira pares, que começará 0, que será o número de pares de varetas iguais que podemos formar. Para cada tipo de vareta i teremos a quantidade q_i de varetas desse comprimento. Com q_i varetas, podemos formar \lfloor{\frac{q_i}{2}}\rfloor pares de varetas, logo, adicionaremos isso à variável pares.

Depois que lermos todas as varetas, imprimiremos a resposta, que, como dito anteriormente, será\lfloor{\frac{pares}{2}}\rfloor. Vamos ao código:


#include <cstdio>
int main(){
int n;
while(true){ // varias entradas
scanf("%d", &n); // leia o valor de n
if(n==0) break; // se n=0, acabou a entrada
int pares=0; // declare pares=0
for(int i=1; i<=n; i++){ // para cada tipo de vareta
int c, v;
scanf("%d %d", &c, &v); // leia a quantidade de varetas desse comprimento
pares+=(v/2); // e adicione a pares a quantidade de pares desse comprimento de vareta que você pode formar
}
printf("%d\n", pares/2); // imprima a resposta
}
return 0;
}

Abaixo, o código, em Java, do leitor Roger Benet.


import java.io.*;
public class solucao{
public static void main(String[] args)throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
int i,qtd,n,c,x;
String[] aux;
while(true){
n = Integer.parseInt(in.readLine());
if(n == 0)break;
qtd = 0;
for(i = 0; i < n; i++){
aux = in.readLine().split(" ");
c = Integer.parseInt(aux[0]);
x = Integer.parseInt(aux[1]);
c = (int) Math.floor(x/2);
qtd += c;
}
qtd /= 2;
out.write(qtd+"\n");
}
out.flush();
}
}