翻硬币

小明正在玩一个“翻硬币”的游戏。

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

比如,可能情形是:oooooo

如果同时翻转左边的两个硬币,则变为:oooo
**oooo

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

程序输入:

两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

程序输出:

一个整数,表示最小操作步数

例如:

用户输入:


oo

程序应该输出:

5

再例如:

用户输入:

ooo***

ooo***

程序应该输出:

1

资源约定:

峰值内存消耗 < 64M

CPU消耗 < 1000ms

思路一:贪心模拟,每次都改变当前硬币和下一个硬币,最后的结果就是正确答案。

这道题其实隐藏了一个条件,初始状态和目标状态不同之处肯定只有偶数处,不可能有奇数处,不然初始状态到达不了目标状态

代码:

#include<iostream>
#include<string>
using namespace std; string a;
string b;
long long ans; int main(){
cin>>a>>b;
int len = a.size();
for(int i=0;i<len;i++){
if(a[i] == '*'){
a[i] = 1;
}else{
a[i] = 0;
} if(b[i] == '*'){
b[i] = 1;
}else{
b[i] = 0;
}
}
for(int i=0;i<len;i++){
if(a[i]!=b[i]){
ans++;
a[i] = b[i];
a[i+1] = !a[i+1];
}
}
cout<<ans<<endl;
return 0;
}

思路二:找到规律,找第一个不相同的,最后一个不相同的(如果只有一个不相同是无解的,题目不会给这种数据),两者间距就是答案!

#include <iostream>
#include <queue>
#include <set> using namespace std; int main(int argc, const char *argv[]) {
string src;
string target;
getline(cin, src);
getline(cin, target);
int n = src.length();
int ans=0;
int start=-1;
for (int i = 0; i < n; ++i) {
if(src[i]!=target[i]){
if(start==-1)
{
start=i;
}else
{
ans+=(i-start);
start=-1;
}
}
}
cout<<ans<<endl;
return 0;
}

思路三:bfs

翻硬币|2013年蓝桥杯B组题解析第八题-fishers的更多相关文章

  1. 黄金连分数|2013年蓝桥杯B组题解析第四题-fishers

    黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...

  2. 前缀判断|2013年蓝桥杯B组题解析第五题-fishers

    前缀判断 如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL. 比如:"abcd1234" 就包含了 &quo ...

  3. 第六届蓝桥杯JavaB组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...

  4. 第六届蓝桥杯JavaA组国(决)赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.胡同门牌号 小明家住在一条胡同里.胡同里的门牌号都是连续的正整数,由于历史原因,最小的号码并不是从1开始排的. 有一天小明突然发现了有 ...

  5. 三部排序|2013年蓝桥杯B组题解析第六题-fishers

    三部排序| 一般的排序有许多经典算法,如快速排序.希尔排序等. 但实际应用时,经常会或多或少有一些特殊的要求.我们没必要套用那些经典算法,可以根据实际情况建立更好的解法. 比如,对一个整型数组中的数字 ...

  6. 带分数|2013年蓝桥杯B组题解析第九题-fishers

    带分数 100 可以表示为带分数的形式:100 = 3 + 69258 / 714 还可以表示为:100 = 82 + 3546 / 197 注意特征:带分数中,数字1~9分别出现且只出现一次(不包含 ...

  7. 错误票据|2013年蓝桥杯B组题解析第七题-fishers

    错误票据 某涉密单位下发了某种票据,并要在年终全部收回. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号. 你的任务是通过编程,找出断号的ID和重号的ID. ...

  8. 第39级台阶|2013年蓝桥杯B组题解析第三题-fishers

    第39级台阶 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚, ...

  9. 大臣的旅费|2013年蓝桥杯A组题解析第十题-fishers

    标题:大臣的旅费 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市 ...

随机推荐

  1. 安装oracle经验

    1.使用database configuration assistant配置和创建数据库 2.使用net manager配置监听 3.使用netconfiguration assistant配置服务

  2. 支持向量机SVM 参数选择

    http://ju.outofmemory.cn/entry/119152 http://www.cnblogs.com/zhizhan/p/4412343.html 支持向量机SVM是从线性可分情况 ...

  3. Java基础(basis)-----异常与错误处理

    1.编译型异常和运行时异常       编译时异常是指程序正确 而由外界条件不满足而产生的异常 java 中要求必须去捕捉住这类异常 不然无法通过编译 运行时异常是指程序存在着bug 如空指针异常 数 ...

  4. Error resolving version for plugin 'org.codehaus.mojo:tomcat-maven-plugin'

    从 SNV 导入新工程后,启动工程,但 Maven 报错: Error resolving version for plugin 'org.codehaus.mojo:tomcat-maven-plu ...

  5. numpy高级索引

    布尔值索引 name_arr = np.array(["bob","joe","will","bob","jo ...

  6. freemark、jsp&css

    **************************************************************freemark相关**************************** ...

  7. 计蒜客--移除数组中的重复元素 (set)

    给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度. 例如:数组 A = \{1, 1, 2\}A={1,1,2},你的程序应该输出 22 即新数组的长度,新数组为 \{1, 2\}{1,2} ...

  8. 通过junit/TestNG+java 实现自动化测试

    第一步 安装JDK JDk1.7. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-188026 ...

  9. 金九银十跳槽季,程序员面试点解析之Java专场

    前言 近年来Java工程师这个岗位炙手可热,市场需求大,学习Java的人也越来越多,所以IT企业与求职者的选择都比较多,那么IT企业在面试时都会提哪些问题呢.下面为大家分享 Java高级工程师面试阿里 ...

  10. Java连接数据库 #04# Apache Commons DbUtils

    索引 通过一个简单的调用看整体结构 Examples 修改JAVA连接数据库#03#中的代码 DbUtils并非是什么ORM框架,只是对原始的JDBC进行了一些封装,以便我们少写一些重复代码.就“用” ...