Advertisement
Guest User

Untitled

a guest
Apr 25th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. /*
  6.     O problema estipula que possuimos um certo numero de caminhoes e devemos transportar todos os paineis
  7.     na ordem que eles aparecem na entrada
  8.    
  9.     A ideia para resolver é a seguinte:
  10.     - Estipulo um valor máximo que cada caminhão transportará
  11.     - Verifico se é possível transportar todos os painéis com essa restrição de valor maximo, e com o número de caminhõe disponiveis
  12.     - Se for possivel transportar todos, posso tentar diminuir o valor e verificar se isso ainda é possível
  13.     - Se não for, só posso aumentar o valor
  14.    
  15.     Para estipular esse valor utiliza-se a busca binária
  16. */
  17. int main(){
  18.     int testes, nPaineis, caminhoes, frete, peso[110], maior;
  19.     cin >> testes;
  20.     while(testes--){
  21.         cin >> nPaineis >> caminhoes >> frete;
  22.        
  23.         // logica de maior para saber qual o maior peso de uma carga
  24.         maior = 0;
  25.         for(int i = 0; i < nPaineis; i++){
  26.             cin >> peso[i];
  27.             // a função max retorna o maior dentre os dois valores
  28.             maior = max(maior, peso[i]);
  29.         }
  30.         // O limite inferior da busca seria o maior peso de uma carga, o superior seria um valor muito grande, maior que a soma das cargas
  31.         // Note que não posso dizer que cada caminhão vai carregar apenas 10kg se existe uma carga de 12kg pq ela não
  32.         // entraria em nenhum caminhão, logo o menor valor que eles podem carregar seria 12kg
  33.        
  34.         int limiteInferior = maior, limiteSuperior = 200000, meio, resposta;
  35.        
  36.         while(limiteInferior <= limiteSuperior){
  37.             meio = (limiteInferior + limiteSuperior)/2;
  38.            
  39.             // Digo que seria necessario ao menos 1 caminhão, e o peso inicial dele é de 0kg
  40.             int nCaminhoesNecessarios = 1, pesoAtual = 0;
  41.             for(int i = 0; i < nPaineis; i++){
  42.                 // carrega-se o caminhao com a cargas até que o peso maximo (meio) seja excedido
  43.                 pesoAtual += peso[i];
  44.                 // Se o peso foi excedido
  45.                 if(pesoAtual > meio){
  46.                     // - vou precisar de um novo caminhao
  47.                     nCaminhoesNecessarios++;
  48.                     // - vou carrega-lo com a carga atual, logo o peso dele seria o mesmo da carga
  49.                     pesoAtual = peso[i];
  50.                 }
  51.             }
  52.            
  53.             // Se eu precisei de menos caminhoes do que estavam disponiveis, quer  dizer que:
  54.             if(nCaminhoesNecessarios <= caminhoes){
  55.                 // - o valor que foi estipulado é uma resposta valida, porém não necessariamente a menor
  56.                 resposta = meio;
  57.                 // - diminuo o limite superior para diminuir o valor do chute e talvez achar uma resposta valida menor
  58.                 limiteSuperior = meio-1;
  59.             }
  60.             // Se eu precisei de mais caminhões do que estavam disponiveis
  61.             else{
  62.                 // a unica coisa que posso fazer é aumentar o quanto de carga colocarei em cada um
  63.                 // para tentar diminuir o numero de caminhoes necessarios
  64.                 limiteInferior = meio+1;
  65.             }
  66.         }
  67.         cout << resposta << " $" << resposta*frete*caminhoes << endl;    
  68.     }
  69. }
  70.  
  71. /****************************************************************************
  72. *                       FELIZ ANIVERSÁRIO!!!                               *
  73. *           MUITA SAÚDE, FELICIDADES, YOGA, ACCEPTEDS,                         *
  74. *       HIDROMEl, SHAVÁSANA, CAFÉS DA MAQUINA E TUDO DE BOM!!!                *  
  75. *                                                                           *
  76. *****************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement