3263 - Apague Com Segurança

Mais um dia, mais um problema Ad Hoc...

Descrição

Solução

Não é necessário ligar e desligar os bits o número de vezes indicado pelo enunciado para obter uma resposta correta. Repare que se temos um número par de varreduras, vamos trocar 0 por 1 e depois 1 por 0 de novo, então número par acarreta sempre na string ser a mesma de antes. Já se tivermos um número ímpar de varreduras, é o equivalente a fazer uma varredura só. Com isso, só precisamos saber a paridade de N para sabermos quais valores deveriam estar nas posições. Basicamente

  • Se N for par, verificar se as strings de antes e depois são iguais;

  • Se N for ímpar, verificar se a string depois tem todos os bits trocados com a string de antes.

#include <string.h>
#include <stdio.h>

int main(){
    int N;
    char antes[1024], depois[1024];

    scanf("%d\n%s\n%s\n", &N, antes, depois);

    N %= 2;

    if(!N){
        if(!strcmp(antes, depois)){
            printf("Deletion succeeded\n");
        }else{
            printf("Deletion failed\n");
        }
    }else{
        int i;
        for(i = 0; i < strlen(antes); ++i){
            if(antes[i] == depois[i]){
                printf("Deletion failed\n");
                break;
            }
        }
        if(i == strlen(antes))  printf("Deletion succeeded\n");
    }

    return 0;
}

Last updated