001:特殊密码锁
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include<memory>
#include<string>
#include<cstring>
using namespace std;
int GetBit(int n, int i) {
return (n >> i) & 1;
}
void SetBit(int &n, int i,char c) {
if (c=='1')
n |= (1 << i);
else
n &= ~(1 << i);
}
void FlipBit(int& n, int i) {
n ^= (1 << i);
}
int main() {
int IniNum=0,AimNum=0,count=99;
string ini, aim;
getline(cin, ini);
getline(cin, aim);
int len = ini.size();
for (int i = 0;i <len ;i++) {
SetBit(IniNum, len-1-i, ini[i]);
SetBit(AimNum, len-1-i, aim[i]);
}
for (int i = 0;i < 2;i++) {
int num = IniNum;
int switches=0;
if (i) {
FlipBit(num, 0);
FlipBit(num, 1);
switches++;
}
for (int j = 1;j < len;j++) {
if(GetBit(num,j-1)!=GetBit(AimNum,j-1)){
switches++;
FlipBit(num, j);
FlipBit(num, j - 1);
if(j<len-1)
FlipBit(num, j + 1);
}
}
if (num == AimNum)
count = count > switches ? switches : count;
}
if (count == 99)
cout << "impossible";
else
cout << count;
return 0;
}
|