NOI OpenJudge 8469 特殊密码锁 Label贪心

描述

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

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

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

输入两行,给出两个由0、1组成的等长字符串,表示当前/目标密码锁状态,其中0代表凹,1代表凸。输出至少需要进行的按按钮操作次数,如果无法实现转变,则输出impossible。样例输入

011
000

样例输出

1

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 string a,des,fuben;
 8 int ans1,ans2,flag1,flag2;
 9 void change(int s,int t){
10     for(int i=s;i<=t&&i<a.size();i++){
11         if(a[i]==‘1‘) a[i]=‘0‘;
12         else if(a[i]==‘0‘) a[i]=‘1‘;
13     }
14 }
15
16 int main(){
17 //    freopen("01.in","r",stdin);
18     cin>>a>>des;
19     fuben=a;
20
21     for(int i=0;i<a.size();i++){
22         if(a[i]!=des[i]){
23             ans1++;
24             if(i==0){change(0,1);}
25             else if(i==a.size()-1){flag1=1;}
26             else {change(i,i+2);}
27         }
28     }
29
30     a=fuben;
31     change(0,1);ans2++;
32     for(int i=0;i<a.size();i++){
33         if(a[i]!=des[i]){
34             ans2++;
35             if(i==0){change(0,2);}
36             else if(i==a.size()-1){flag2=1;}
37             else {change(i,i+2);}
38         }
39     }
40
41     if(flag1==1&&flag2==1) puts("impossible");
42     if(flag1==1&&flag2!=1) printf("%d\n",ans2);
43     if(flag1!=1&&flag2==1) printf("%d\n",ans1);
44     if(flag1!=1&&flag2!=1) printf("%d\n",min(ans1,ans2));
45     return 0;
46 }

请参考 开关问题

值得注意的是Line31 必须写

否则看这组数据

001

000

时间: 2024-11-04 21:11:45

NOI OpenJudge 8469 特殊密码锁 Label贪心的相关文章

8469:特殊密码锁

传送门:http://noi.openjudge.cn/ch0406/8469/ 描述 有一种特殊的二进制密码锁,由n个相连的按钮组成(n<30),按钮有凹/凸两种状态,用手按按钮会改变其状态. 然而让人头疼的是,当你按一个按钮时,跟它相邻的两个按钮状态也会反转.当然,如果你按的是最左或者最右边的按钮,该按钮只会影响到跟它相邻的一个按钮. 当前密码锁状态已知,需要解决的问题是,你至少需要按多少次按钮,才能将密码锁转变为所期望的目标状态. 输入 两行,给出两个由0.1组成的等长字符串,表示当前/目

整理小朋友在noi.openjudge上的作业(4)

第四章(含小学奥数)计97题,已完成8题 4.1 算法之排序和算法性能   题目ID 标题 分数 尝试人数   1625 Sequence Median 10 90   1754 字符串数组排序问题 10 49   1999 日志排序 10 50   4363 瑞士轮 10 101 4.2 算法之数论   题目ID 标题 分数 尝试人数   1350 Euclid's Game 10 223   1486 A Funny Game 10 70   185 反正切函数的应用 10 44   241

2971 抓住那头牛 noi.openjudge

http://noi.openjudge.cn/ch0205/2971/ 总时间限制:  2000ms 内存限制:  65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次移动花费一分钟 2.从X移动到2*X,每次移动花费一分钟 假设牛没有意识到农夫的行动,站在原地不动.农夫最少要花多少时间才能抓住牛? 输入 两个整数

noi openjudge 1768:最大子矩阵

http://noi.openjudge.cn/ch0406/1768/ 描述已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2 的最大子矩阵是 9 2-4 1-1 8 这个子矩阵的大小是15.输入输入是一个N * N的矩阵.输入的第一行给出N (0 < N <= 100).再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从

整理小朋友在noi.openjudge上的作业(1)

NOI(题库正在建设中,做题纪录有可能会被删除,请注意) 第一章的统计放前面 1 编程基础之输入输出 10 0 0% 最基础有空补刷 2 编程基础之变量定义.赋值及转换 10 0 0% 最基础有空补刷 3 编程基础之算术表达式与顺序执行 20 0 0% 最基础有空补刷 4 编程基础之逻辑表达式与条件分支 21 0 0% 最基础有空补刷 5 编程基础之循环控制 45 10 22% 最基础有空补刷 6 编程基础之一维数组 15 5 33% 最基础有空补刷 7 编程基础之字符串 35 0 0% 有必要

词典 (noi OpenJudge)

传送门:1806:词典 神奇的STL #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <sstream> using namespace std; string s, s1, s2, word; map <string, string> dic; int main() { while (getline (cin, s) &

noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= m <= 100.接下来n行,每行m个整数,表示图像的每个像素点灰度.相邻两个整数之间用单个空格隔开,每个元素均在0~255之间. 输出 m行,每行n个整数,为顺时针旋转90度后的图像.相邻两个整数之间用单个空格隔开. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 7 4 1 8 5

noi题库(noi.openjudge.cn) 1.11编程基础之二分查找T01、02、04

T01 查找最接近的元素 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n <= 100000.第二行包含n个整数,为非降序列各元素.所有元素的大小均在0-1,000,000,000之间.第三行包含一个整数m,为要询问的给定值个数.1 <= m <= 10000.接下来m行,每行一个整数,为要询问最接近元素的给定值.所有给定值的大小均在0-1,000,000,000之间. 输出 m行,每行一个整数,为最接近相应给定值的元素

noi题库(noi.openjudge.cn) 3.9数据结构之C++STL T1——T2

T1 1806:词典 描述 你旅游到了一个国外的城市.那里的人们说的外国语言你不能理解.不过幸运的是,你有一本词典可以帮助你. 输入首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行.每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开.而且在词典中不会有某个外语单词出现超过两次.词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词.输入中出现单词只包括小写字母,而且长度不会超过10.输出在输出中,你需要把