Pesquisar este blog

Livros Recomendados

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

quarta-feira, 17 de fevereiro de 2021

URI (BEECROWD) - 1574 - Instruções do Robô - Ad-Hoc - C e C++

Nesse post está apresentada a solução do problema "Instruções do Robô". É um problema Ad-hoc do Beecrowd

Plataforma: URI (BEECROWD)

Problema1574

Enunciado:

Você possui um robô na origem do eixo x. O robô receberá algumas instruções. Sua tarefa é predizer sua posição depois de executar todas as instruções.

  • LEFT: move uma unidade para a esquerda (diminui p em 1, onde p é a posição do robô antes de mover)
  • RIGHT: move uma unidade para a direita (incrementa p em 1)
  • SAME AS i: executa a mesma ação que na i-ésima instrução. É garantido que i é um inteiro positivo não maior que o número de instruções já executadas.

Linguagens: C e C++

Solução:

Aqui as soluções em C e C++ são iguais, diferindo apenas em comandos específicos da linguagem e no uso de string em C++ e char em C.

Mais uma vez, como já costumo fazer, não testei a string inteira, assumindo que as entradas estarão dentro dos padrões esperados. Na vida real, teste a string inteira!

Então verifico se ela começa por S o L. Caso contrário, assumo que será R.

Se for S, lê lixo e num e atualiza comandos[i] com comandos[num-1].

Se for L, decrementa p. Se for R, incrementa p.

Código em C:

#include <stdio.h>
int main() {
    int t, n, num, p, i;
    char linha[10], comandos[101], lixo[7];
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        p = 0;
        for (i = 0; i < n; i++) {
            scanf("%s ", &linha);
            comandos[i] = linha[0];

            if (linha[0] == 'S') {
                scanf("%s %d", &lixo, &num);
                comandos[i] = comandos[num-1];
            }
            if (comandos[i] == 'L')
                p--;
            else
                p++;
        }
        printf("%d\n", p);
    }

    return 0;
}

Código em C++:

#include <iostream>
using namespace std;
int main() {
    int t, n, num, p, i;
    string linha, comandos[101], lixo;
    cin >> t;
    while (t--) {
        cin >> n;
        p = 0;
        for (i = 0; i < n; i++) {
            cin >> linha;
            comandos[i] = linha;

            if (linha[0] == 'S') {
                cin >> lixo >> num;
                comandos[i] = comandos[num-1];
            }
            if (comandos[i][0] == 'L')
                p--;
            else
                p++;
        }
        cout << p << 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