
输入样例
011
000
输出样例
1
AC代码:
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
inline int divers(int n){
if(n) return 0;
return 1;
}
int main(){
int a[40], b[40], c[40];
string s;
cin >> s;
int ans = 999, len = s.length(), tem = 0, temf = 0;
for(int i = 1; i <= len; ++i) c[i] = a[i] = s[i - 1] - '0';
cin >> s;
for(int i = 1; i <= len; ++i) b[i] = s[i - 1] - '0';
if(len == 1){
printf("1"); return 0;
}
for(int i = 1; i <= len; ++i){
if(temf){
c[i-1] = divers(c[i-1]), c[i] = divers(c[i]);
if(i != len)c[i+1] = divers(c[i+1]);
if(c[i] == b[i]) temf = 0; tem++;
continue;
}
if(c[i] != b[i]) temf = 1;
}
if(!temf&&c[len] == b[len]) ans = min(ans, tem);
for(int i = 1; i <= len; ++i) c[i] = a[i];
c[1] = divers(c[1]); c[2] = divers(c[2]);
tem = 1, temf = a[1] == b[1] ? 1:0;
for(int i = 2; i <= len; ++i){
if(temf){
c[i-1] = divers(c[i-1]), c[i] = divers(c[i]);
if(i != len) c[i+1] = divers(c[i+1]);
if(c[i] == b[i]) temf = 0; tem++;
continue;
}
if(c[i] != b[i]) temf = 1;
}
if(!temf&&c[len] == b[len]) ans = min(ans, tem);
if(ans != 999) printf("%d", ans);
else printf("impossible");
return 0;
}
495

被折叠的 条评论
为什么被折叠?



