Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1973. Mostrar todas as postagens
Mostrando postagens com marcador 1973. Mostrar todas as postagens

domingo, 28 de fevereiro de 2021

URI (BEECROWD) - 1973 - Jornada nas Estrelas - Iniciante - C e C++

Jornada nas Estrelas! Este é o problema resolvido e postado aqui. Espero que curtam essas soluções!!!! :)

Plataforma: URI (BEECROWD)

Problema1973

Enunciado:

Após comprar vários sítios adjacentes na região do oeste catarinense, a família Estrela construiu uma única estrada que passa por todos os sítios em sequência. O primeiro sítio da sequência foi batizado de Estrela 1, o segundo de Estrela 2, e assim por diante. Porém, o irmão que vive em Estrela 1 acabou enlouquecendo e resolveu fazer uma Jornada nas Estrelas para roubar carneiros das propriedades de seus irmãos. Mas ele está definitivamente pirado. Quando passa pelo sítio Estrela i, ele rouba apenas um carneiro daquele sítio (se o sítio tem algum) e segue ou para Estrela i + 1 ou para Estrela i - 1, dependendo se o número de carneiros em Estrela i era, respectivamente, ímpar ou par. Se não existe a Estrela para a qual ele deseja seguir, ele interrompe sua jornada. O irmão louco começa sua Jornada em Estrela 1, roubando um carneiro do seu próprio sítio.

Linguagens: C e C++


Solução:

Código em C:

#include <stdio.h>

int main() {
    
    long long int n, indice, estrelasAtacadas = 0, carneirosRestantes = 0;
    scanf("%llu", &n);
    
    long long int valores[n], copia[n];

    for (indice = 0; indice < n; indice++) {
        
        scanf("%llu", &valores[indice]);
        copia[indice] = 0;
        
    }
    
    indice = 0;
    while (indice >= 0 && indice < n) {
        
        if (valores[indice] == 0)
            indice--;
            
        else {
            
            valores[indice]--;
            copia[indice] = 1;
            
            if (valores[indice] & 1)
                indice--;
                
            else
                indice++;
        }
    }
    
    for (indice = 0; indice < n; indice++) {
        
        carneirosRestantes += valores[indice];
        
        if (copia[indice])
            estrelasAtacadas++;
    }

    printf("%llu %llu\n", estrelasAtacadas, carneirosRestantes);
    
    return 0;
}

Código em C++:

Esta resposta segue a mesma lógica do código em C.

#include <iostream>

using namespace std;

int main() {
    long long int n, indice, estrelasAtacadas = 0, carneirosRestantes = 0;
    cin >> n;
    
    long long int valores[n], copia[n];
    for (indice = 0; indice < n; indice++) {
        cin >> valores[indice];
        copia[indice] = 0;
    }
    
    indice = 0;
    while (indice >= 0 && indice < n) {
        
        if (valores[indice] == 0)
            indice--;
            
        else {
            
            valores[indice]--;
            copia[indice] = 1;
            
            if (valores[indice] & 1)
                indice--;
                
            else
                indice++;
        }
        
    }
    
    for (indice = 0; indice < n; indice++) {
        
        carneirosRestantes += valores[indice];
        
        if (copia[indice])
            estrelasAtacadas++;
    }


    cout << estrelasAtacadas << " " << carneirosRestantes << endl;
    return 0;
}

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas