特殊密码锁

声明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;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页