首页 > 技术文章 > 特殊密码锁 的通过码是:(请注意,在openjudge上提交了程序并且通过以后,就可以下载到通过码。请注意看公告里关于编程作业的说明)

suway 2017-11-20 14:41 原文

//
//  main.cpp
//  openjudge特殊密码锁
//
//  Created by suway on 17/11/20.
//  Copyright © 2017年 suway. 
//

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s,t,fin;
int tmp=0,ans=1e9,n;
inline void flip(int i){
    s[i-1]=s[i-1]=='1'?'0':'1';
    s[i]=s[i]=='1'?'0':'1';
    if(i+1<n) s[i+1]=s[i+1]=='1'?'0':'1';
}
int main(int argc, const char * argv[]) {
    cin>>s>>fin;t=s;
    n=s.size();
    for(int i=1;i<n;i++)
        if(s[i-1]!=fin[i-1]){
            flip(i); tmp++;
        }
    if(s[n-1]==fin[n-1]) ans=tmp;
    
    tmp=1;
    s=t;
    s[0]=s[0]=='1'?'0':'1';
    s[1]=s[1]=='1'?'0':'1';
    for(int i=1;i<n;i++)
        if(s[i-1]!=fin[i-1]){
            flip(i); tmp++;
        }
    if(s[n-1]==fin[n-1]) ans=min(ans,tmp);
    if(ans==1e9) cout<<"impossible";
    else cout<<ans;
    return 0;
}

 

推荐阅读