特殊密码锁

声明2个性质:

1. 一个按钮最多摁一次

2. 如果确定了第一个按钮是否被摁,则其他按钮是否被摁也被确定。

#include <iostream>
#include <string>
#include <memory.h>
#include <stdio.h>
using namespace std;
char now[35], target[35];
void Flip( char &tmp )
{
    if( tmp == '1' )
        tmp = '0';
    else
        tmp = '1';
}
int main()
{
    memset(now, 0, sizeof(now));
    memset(target, 0, sizeof(target));
    gets(now);
    gets(target);
    int len = strlen(now);
    int ans1 = 1;
    char tmp[35];
    strcpy(tmp, now);
    Flip( tmp[0] );
    if( len > 1 )
        Flip( tmp[1] );
    for( int i = 1; i < len; i++ )
    {
        if( tmp[i-1] != target[i-1] )
        {
            ans1++;
            Flip( tmp[i-1] );
            Flip( tmp[i] );
            if( i < len-1 )
                Flip( tmp[i+1] );
        }
    }
    if( tmp[len-1] != target[len-1] )
        ans1 = 50;
    int ans2 = 0;
    for( int i = 1; i < len; i++ )
    {
        if( now[i-1] != target[i-1] )
        {
            ans2++;
            Flip( now[i-1] );
            Flip( now[i] );
            if( i < len-1 )
                Flip( now[i+1] );
        }
    }
    if( now[len-1] != target[len-1] )
        ans2 = 50;
    int ans = min(ans1, ans2);
    if( ans < 50 )
        cout << ans << endl;
    else
        cout << "impossible" << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值