AcWing 1208 lançar a moeda

Descrição do título:

Xiao Ming está jogando um jogo de "cara ou coroa".

Existem várias moedas seguidas na mesa. Usamos * para representar a frente e o para representar o verso (letras minúsculas, não zeros).

Por exemplo, as situações possíveis são:**oo***oooo

Se você virar as duas moedas à esquerda ao mesmo tempo, torna-se:oooo***oooo

Agora a pergunta de Xiaoming é: Se o estado inicial e o estado alvo a ser alcançado são conhecidos, e apenas duas moedas adjacentes podem ser viradas ao mesmo tempo ao mesmo tempo, quantas vezes devem ser viradas pelo menos para uma situação particular?

Concordamos: virar duas moedas adjacentes é chamado de operação de uma etapa.

Formato de entrada

Duas cadeias de comprimento igual representam, respectivamente, o estado inicial e o estado de destino a ser alcançado.

Formato de saída

Um número inteiro que representa o número mínimo de etapas de operação

intervalo de dados

O comprimento da string de entrada não excede 100.
Os dados garantem que a resposta deve ser solucionável.

Exemplo de entrada 1:

**********
o****o****

Amostra de saída 1:

5

Exemplo de entrada 2:

*o**o***o***
*o***o**o***

Amostra de saída 2:

1

 

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int MAX = 109;

char a[MAX], b[MAX];

int main()
{
    scanf("%s %s", a, b);

    int l = strlen(a);

    int sum = 0;

    for(int i = 0; i < l; i++)
    {
        if(a[i] != b[i])
        {
            sum ++;
            if(a[i+1] == 'o')
                a[i+1] = '*';
            else
                a[i+1] = 'o';
        }
    }

    printf("%d\n", sum);


    return 0;
}

 

Acho que você gosta

Origin blog.csdn.net/weixin_44620183/article/details/113251503
Recomendado
Clasificación