总时间限制: 1000ms 内存限制: 1024kB
描述
有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态。
然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮。
当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态。
输入
两行,给出两个由0、1组成的等长字符串,表示当前/目标密码锁状态,其中0代表凹,1代表凸。
输出
至少需要进行的按按钮操作次数,如果无法实现转变,则输出impossible。
样例输入

样例输出

 

解题思路:

由于第一个按钮是否按下会影响后面所有的按钮,因此枚举第一个按钮对应的两种情况。另外,如果按钮按下后和目标状态不相同,之前的情况已经枚举完毕,只需要按下下一个按钮即可。

代码:

#include <iostream>
#include <cstring>
using namespace std; int len = ;
int result = << ;//最终的结果
int cnt = ;//每次枚举得出的操作次数 //将第i位反转
void ReNum(char* a, int i) {
if (a[i] == '')
{
a[i] = '';
}
else
{
a[i] = '';
}
} //比较是否相同
int cmp(char* a, char* b) {
int i = ; for (; i < len; i++) {
if (a[i] != b[i]) {
return false;
}
}
return true;
} //设置反转
void Reversal(char* a, int i) {
ReNum(a, i);
if (i == ) {
ReNum(a, i + );
}
else {
ReNum(a, i - );
ReNum(a, i + );
}
cnt++;
} //获取更小的
int min(int i, int j) {
if (i < j)
return i;
else
return j;
} int main()
{
char a[];
char target[]; //初始状态和目标状态
char temp[]; cin >> a >> target;
len = strlen(a); if (cmp(a, target))//已经和目标状态相等
{
cout << ;
return ;
} for (int k = ; k < ; k++) //第一位反转与否
{
cnt = ;//记录置零
memcpy(temp, a, len); if (k == )//改变第一位
{
Reversal(temp, );
if (cmp(temp, target))//如果这样就可以了,这个肯定是最小值
{
result = min(result, cnt);//保存结果
}
}
for (int i = ; i < len - ; i++)
{
if (temp[i] != target[i])
{
Reversal(temp, i + );//如果不相等就改变下一位
if (cmp(temp, target))
{
result = min(result, cnt);//保存结果
}
}
}
}
if (result == << ) //如果没有成功过
cout << "impossible";
else
cout << result;
return ;
}

POJ8469 特殊密码锁的更多相关文章

  1. openjudge8469特殊密码锁[贪心]

    描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转.当然,如果你 ...

  2. NOI OpenJudge 8469 特殊密码锁 Label贪心

    描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转.当然,如果你 ...

  3. Android 九宫格密码锁进入程序

    设置九宫格密码锁进入程序,设置,重置,取消等,安卓巴士地址http://www.apkbus.com/forum.php?mod=viewthread&tid=182620&extra ...

  4. iOS开发——高级技术&密码锁功能的实现

    密码锁功能的实现 一个ios手势密码功能实现 ipad/iphone 都可以用 没有使用图片,里面可以通过view自己添加 keychain做的数据持久化,利用苹果官方KeychainItemWrap ...

  5. [51nod1357]密码锁

    有一个密码锁,其有N位,每一位可以是一个0~9的数字,开启密码锁需要将锁上每一位数字转到解锁密码一致.这个类似你旅行用的行李箱上的密码锁,密码锁的每一位其实是一个圆形转盘,上面依次标了0,1,...9 ...

  6. 基于VHDL利用PS2键盘控制的电子密码锁设计

    基于VHDL利用PS2键盘控制的密码锁设计 附件:下载地址 中文摘要 摘 要:现代社会,人们的安全意识正在不断提升.按键密码锁由于其具有方便性.低成本等特征,还是大有用武之地的.但是通常的按键密码锁开 ...

  7. poj 8469 特殊密码锁

    a:特殊密码锁 总时间限制: 1000ms 内存限制: 1024kB 描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头 ...

  8. UVa 1631 密码锁

    https://vjudge.net/problem/UVA-1631 题意: 有一个n位密码锁,每位都是0~9,可以循环旋转.每次可以让1~3个相邻数字同时往上或者往下转一格.输入初始状态和终止状态 ...

  9. 【小梅哥FPGA进阶教程】第十二章 数字密码锁设计

    十二.数字密码锁设计 本文由山东大学研友袁卓贡献,特此感谢 实验目的 实现数字密码锁设计,要求矩阵按键输出且数码管显示输入密码,密码输入正确与否均会有相应标志信号产生. 实验平台 芯航线FPGA核心板 ...

随机推荐

  1. SparkSQL读写外部数据源-通过jdbc读写mysql数据库

    object JdbcDatasourceTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builde ...

  2. hexo与github page搭建博客

    安装 npm i hexo-cli -g hexo init blog cd blog npm install hexo server 发布hexo到github page npm i hexo-de ...

  3. mssql提权

    MSSQL的提权:下面是三种方法一种利用xp_cmshell组件,还有一种sp_OACreate组件,COM组件 xp_cmshell组件的开启: 1.sql2005版本以后默认为关闭状态,需要开启命 ...

  4. LeetCode 1048. Longest String Chain

    原题链接在这里:https://leetcode.com/problems/longest-string-chain/ 题目: Given a list of words, each word con ...

  5. Jupyter notebook 自动补全

    Jupyter notebook 自动补全   Jupyter notebook使用默认的自动补全是关掉的.要打开自动补全,需修改默认配置.  ipython profile create 以上命令会 ...

  6. ShardingSphere初探1 -- 概览

    知道这个框架是通过一期QQ课堂 https://shardingsphere.apache.org 官网 https://github.com/apache/incubator-shardingsph ...

  7. lettcode 上的几道哈希表与链表组合的数据结构题

    目录 LRU缓存 LFU缓存 全O(1)的数据结构 lettcode 上的几道哈希表与链表组合的数据结构题 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recen ...

  8. sublime text 3 安装、添加命令行启动、汉化、注册码

    1. 安装sublime: 下载:http://www.sublimetext.com/3 添加命令行启动:设置环境变量->计算机->右键属性->高级系统设置->环境变量-&g ...

  9. async、await总结

    一.async用法 async作为一个关键字放到函数前面,用于表示函数是一个异步函数.异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 异步函数语法很简单,就是在函数前面加上async 关键字, ...

  10. 复旦高等代数 I(16级)每周一题

    每周一题的说明 一.本学期高代I的每周一题面向16级的同学,将定期更新(一般每周的周末公布下一周的题目); 二.欢迎16级的同学通过微信或书面方式提供解答图片或纸质文件给我,优秀的解答可以分享给大家: ...