[二分枚举]特殊密码锁

描述

有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态。

然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转。当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮。

当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态。

输入

两行,给出两个由0、1组成的等长字符串,表示当前/目标密码锁状态,其中0代表凹,1代表凸。

输出

至少需要进行的按按钮操作次数,如果无法实现转变,则输出impossible。

样例输入

011
000

样例输出

1
解题分析

二进制序列,按了其中一个数可以让其和其旁边的一个或者两个数取反。

其实这道题的限制条件也很容易发现,关键就在于一个分类讨论,那就是第一个按钮开始的一个确定序列。什么意思?如果前面一个按钮按与不按的状态确定了,那么后续的按钮按与不按的状态也都确定了,我们只需要枚举第一个按钮的状态即可。这个又可以联想到一个15*15方格的画家图画板的问题,或者说是点灯问题,这也是很经典的。

我们枚举第一个按钮的状态,如果二者第一个数不同,我们要想改变第一个数的状态就只有按第一个按钮或者说按第二个按钮。如果我们选择了按第一个按钮,那么后续能够影响第二个按钮状态的就只有第三个按钮了,如果不按第一个按钮,我们就得按第二个按钮,然后我们同样地也可以发现能影响第二个按钮的就只有第三个按钮了,以此类推。

代码实现
#include <iostream>
#include <cmath>
#include <iomanip>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <bitset>
using namespace std;void press(string &s,int i){int l=s.size();if(i==0){s[i]=(s[i]=='1'?'0':'1');s[i+1]=(s[i+1]=='1'?'0':'1');}else if(i==l-1){s[i]=(s[i]=='1'?'0':'1');s[i-1]=(s[i-1]=='1'?'0':'1');}else{s[i]=(s[i]=='1'?'0':'1');s[i-1]=(s[i-1]=='1'?'0':'1');s[i+1]=(s[i+1]=='1'?'0':'1');}
}int main(){string cur,des;int len;int c=0;int res=1e9;cin>>cur>>des;len=cur.size();//分类讨论,第一个位置按或者不按,总共只有这两种情况//之后的每个位置都因为第一个位置按或者不按而确定string cur1=cur;press(cur,0);c++;for(int i=1;i<len;i++){if(cur[i-1]==des[i-1]){continue;}else{press(cur,i);c++;}}	if(cur==des){res=min(res,c);}c=0;for(int i=1;i<len;i++){if(cur1[i-1]==des[i-1]){continue;}else{press(cur1,i);c++;}}if(cur1==des){res=min(res,c);}if(res==1e9){cout<<"impossible"<<endl;}else{cout<<res<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 10永久关闭“系统准备工具 3.14“禁止开机自启

文章目录 一、问题描述二、解决方法总结 一、问题描述 每次开机都会显示如下图所示的 系统准备工具 3.14 二、解决方法 按win R键打开运行窗口 → 输入cmd → 点击 确定 如图所示输入下面如图所示代码 → 按 回车 → 输入 Y → 按 回车 XCOPY C:\windows\System32\svchost.e…

Apache ShardingSphere实战与核心源码剖析

Apache ShardingSphere实战与核心源码剖析 1.数据库架构演变与分库分表介绍 1.1 海量数据存储问题及解决方案 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。…

外观缺陷检测原理

产品外观是影响产品质量最重要的因素之一&#xff0c;其平整度、有无瑕疵等不仅影响到产品美观&#xff0c;甚至能够直接影响产品本身的使用和后续加工&#xff0c;给企业带来重大经济损失。 随着人工智能技术的快速发展&#xff0c;机器视觉与AI技术的结合应用加速渗透进工业…

CSS外部样式

CSS的外部样式表是网页设计中一个非常强大的工具&#xff0c;它允许我们集中管理多个页面的样式&#xff0c;从而提高开发效率和维护性。本文将介绍如何使用CSS外部样式表&#xff0c;以及如何进行优化命名&#xff0c;以保持代码的清晰和可维护性。 什么是CSS外部样式&#x…

AutoMQ 社区双周精选第十一期(2024.05.27~2024.06.12)

本期概要 欢迎来到 AutoMQ 第十一期双周精选&#xff01;在过去两周里&#xff0c;主干动态方面&#xff0c;AutoMQ 跟进了 Apache Kafka 3.4.x BUG 修复&#xff0c;并进行了CPU & GC 性能优化。另外&#xff0c;AutoBalancing 的 Reporter 和 Retriever 也开始支持指定 …

数据可视化实验二:回归分析、判别分析与聚类分析

目录 一、使用回归分析方法分析某病毒是否与温度呈线性关系 1.1 代码实现 1.2 线性回归结果 1.3 相关系数验证 二、使用判别分析方法预测某病毒在一定的温度下是否可以存活&#xff0c;分别使用三种判别方法&#xff0c;包括Fish判别、贝叶斯判别、LDA 2.1 数据集展示&am…

燃气经营企业从业人员题库

1.下列关于门站、储配站内消防设施的工艺设计的说法&#xff0c;那个是错误的&#xff08; &#xff09; A.储配站在同一时间内的火灾次数按一次考虑。 B.储配站内的消防给水管网应采用环形管网&#xff0c;其给水干管不少于两条。 C.站内室外消防栓宜采用地上消防栓。 D.门…

docker 搭建 最新版本的 gitlab,使用HTTPS访问,以及gitlab的基础使用讲解

文章目录 一、环境准备1.1 docker 安装 二、gitlab 搭建2.1 环境准备2.2 启动gitlab容器2.3 验证 GitLab 启动2.4 备份和恢复2.5 升级 GitLab 三、已搭建的gitlab升级为HTTPS访问3.1 准备 SSL 证书3.2 创建目录3.3 复制证书3.4 修改 GitLab 配置3.5 重新配置并重启 GitLab3.6 重…

【大语言模型】本地快速部署Ollama运行大语言模型详细流程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【C++提高编程-09】----C++ STL之常用排序算法

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

苹果在WWDC 2024的AI创新

1. 引言 苹果的年度全球开发者大会&#xff08;WWDC&#xff09;历来是展示其最新技术和创新的平台。2024年的WWDC尤其引人注目&#xff0c;因为苹果将重点关注人工智能&#xff08;AI&#xff09;&#xff0c;推出一系列令人期待的更新和功能。本文将详细探讨这些AI创新&…

电商平台数据的认知与深度理解

随着信息技术的迅猛发展&#xff0c;电商平台已成为现代社会商业活动的重要舞台。在这个舞台上&#xff0c;数据不仅是交易的记录&#xff0c;更是企业决策的依据、用户行为的镜子和市场变化的晴雨表。本文将从多个维度对电商平台数据进行全面且深入的认知和理解。 一、数据的…

从WWDC 2023看苹果的未来:操作系统升级与AI技术的融合

引言 在2024年的WWDC&#xff08;苹果全球开发者大会&#xff09;上&#xff0c;苹果公司展示了一系列创新技术和产品&#xff0c;其中最引人注目的莫过于操作系统的升级与AI技术的深度融合。作为一个备受期待的发布会&#xff0c;WWDC不仅向我们展示了苹果在技术上的前瞻性布…

建议收藏:防止外发文件二次泄密的七个办法

防止外发文件二次泄密是一项重要的信息安全管理任务&#xff0c;特别是在涉及敏感信息、商业秘密或知识产权的文档时。以下是一些有效的策略和措施&#xff0c;用以降低文件外发后的泄密风险。 1. 使用加密软件&#xff08;安企神软件&#xff09; 透明加密&#xff1a;对外发…

Linux下git用http连接时免输密码方法

1、创建 .git-credentials文件 在~/下&#xff0c; 创建并编辑文件 .git-credentials touch .git-credentials vim .git-credentials http://用户名:密码gitlab.anlitech.com 2、初始化配置.gitconfig git config --global credential.helper store

生成式AI在电影产业的崛起

1. 引言 生成式AI技术正迅速改变电影产业的面貌&#xff0c;从创建高质量的视频片段到实现复杂的特效&#xff0c;甚至是演员的去老化技术&#xff0c;都显示出其强大的潜力。公司如Runway引领了这一潮流&#xff0c;其Gen-2工具已被广泛使用&#xff0c;主要电影制片厂也开始…

GPT-4系列模型,在文档理解中的多维度评测

著名云数据平台Snowflake的研究人员发布了一篇论文&#xff0c;主要对OpenAI的GPT-4系列模型进行了研究&#xff0c;查看其文本生成、图像理解、文档摘要等能力。 在DocVQA、InfographicsVQA、SlideVQA和DUDE数据集上对GPT-4、GPT-4 V、GPT-4 Turbo V OCR等进行了多维度测试。…

场外期权在哪个平台可以买卖?

今天带你了解场外期权在哪个平台可以买卖&#xff1f;近年来&#xff0c;随着投资者对个股期权交易的兴趣不断增加&#xff0c;市场上涌现出了许多热门的场外个股期权交易平台&#xff0c;那么在哪个平台可以买卖场外期权&#xff1f; 场外期权在哪个平台可以买卖&#xff1f; …

Go 基础丨字符串 string

1. 底层 runtime/string.go type stringStruct struct {str unsafe.Pointer // 指向底层 Byte 数组len int // String 所占字节数 }reflect/value.go type StringHeader struct {Data uintptrLen int }2. 测试 s_en : "hedonwang"s_cn : "王小佳"…

5G消息 x 融媒 | 媒体融合新入口

5G消息 x 融媒 | 媒体融合新入口 5G 消息是 5G 时代三大运营商联合手机厂商推出的平台型应用&#xff0c;5G 消息以短信为入口&#xff0c;以富媒体消息为媒介&#xff0c;具有权威真实、全面覆盖、精准投放、内容汇聚、开放共享等特点。这些特点符合当下融媒体发展的需求&…