openjudge 特殊密码锁(开关问题)
来源:互联网 发布:淘宝店铺运营助手在哪 编辑:程序博客网 时间:2024/05/19 00:48
特殊密码锁
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 1024kB
- 描述
有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态。
然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮。
当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态。
- 输入
- 两行,给出两个由0、1组成的等长字符串,表示当前/目标密码锁状态,其中0代表凹,1代表凸。
- 输出
- 至少需要进行的按按钮操作次数,如果无法实现转变,则输出impossible。
- 样例输入
011000
- 样例输出
1
tips:典型的开关问题,思路;
枚举第一个数字的翻转情况;
然后每次比较前一个数字是否与目的串相符,不符的话当前数字必须翻转;
最后看最后一个数字是否相符;
#include<iostream>#include<algorithm>#include<cstring>using namespace std;string s1,s2;int tmp[333];//标志当前是否进行翻转 bool equal(int x){int cnt=tmp[x]+tmp[x-1]+tmp[x+1];if(cnt%2==0)return s1[x]==s2[x]; else return s1[x]!=s2[x];}int cal(){for(int i=1;i<s1.size();i++){if(!equal(i-1)){tmp[i]=1; } }if(!equal(s1.size()-1))return -1;int cnt=0;for(int i=0;i<s1.size();i++){cnt+=tmp[i];}return cnt;}int main(){cin>>s1>>s2;int ans=-1;for(int i=0;i<=1;i++){memset(tmp,0,sizeof(tmp));tmp[0]=i;int t=cal();if(t>=0){if(ans<0)ans=t;else ans=min(ans,t);}}if(ans==-1)cout<<"impossible"<<endl;else cout<<ans<<endl;return 0;}
阅读全文
0 0
- openjudge 特殊密码锁(开关问题)
- OpenJudge 8469: 特殊密码锁(贪心)
- OpenJudge 8469:特殊密码锁
- openjudge-特殊密码锁
- OpenJudge - 8469:特殊密码锁
- OpenJudge 8469:特殊密码锁
- openjudge 8469 特殊密码锁
- OpenJudge[8469]特殊密码锁
- 贪心 openjudge特殊密码锁
- openJudge 特殊密码锁 ACM
- Openjudge - 8469 特殊密码锁 贪心
- OpenJudge-Mooc 1:特殊密码锁
- 枚举-OpenJudge-8469-特殊密码锁
- Openjudge 8469:特殊密码锁 暴力搜索
- 特殊密码锁,openjudge全局题号8496,已AC
- 043day(特殊密码锁问题的思考)
- 特殊密码锁
- 特殊密码锁
- webpack(2):Loader
- js中关于ASCII码、进制的转换
- python 试题:写一段程序逐行读入一个文本文件,并在屏幕上打印出来。
- 如何用命令行在github新建一个项目
- 【机器学习】先验概率、后验概率、贝叶斯公式、 似然函数
- openjudge 特殊密码锁(开关问题)
- 分类器
- Anguar入门--开发环境的搭建
- azure 最佳实践-- 系统运维
- Python turtle库入门小练习
- python 试题:Python中pass语句的作用是什么?
- 旋转轮播图
- HTML5简介
- C# 中的委托和事件