问题描述

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

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

比如,可能情形是:**oo***oooo

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

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

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

输入格式

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

输出格式

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

样例输入1
**********
o****o****
样例输出1
5
样例输入2
*o**o***o***
*o***o**o***
样例输出2
1
大家都说这个提太水了,直接从左往右遍历,改翻就翻就可以了。但是如果是这样1000110011001这样的,我们从左往右快呢还是先把中间的两个连在一起的翻过来快呢。?
翻得次数很容易理解就是所有的不同的位置下标差的和。然后呢,根据牟sir说的,abcd连在一起的时候,c-b+d-a > b-a+d-c。这样的话,我们应该选择上述第一种方案,从左往右。【小声嘀咕,这样真的和贪心还有关系吗....】
附right代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 using namespace std;
 5
 6 char str1[1010], str2[1010];
 7 int num[1010];
 8
 9 int main() {
10     while(cin >> str1 >> str2) {
11         int len = strlen(str1);
12         memset(num, 0, sizeof(num));
13
14         for (int i=0; i<len; ++i) {
15                 if (str1[i] != str2[i]) {
16                     num[i] = 1;
17                 }
18         }
19
20         int ans = 0;
21         int st;
22         bool exit = false;
23         for (int i=0; i<len; ++i) {
24             if (num[i] == 1 && exit) {
25                 ans += i - st;
26                 exit = false;
27             }
28             else if (num[i] == 1 && !exit) {
29                 st = i;
30                 exit = true;
31             }
32         }
33
34         cout << ans << endl;
35     }
36     return 0;
37 }

View Code

转载于:https://www.cnblogs.com/icode-girl/p/5261375.html

蓝桥杯练习系统历届试题 翻硬币相关推荐

  1. 蓝桥杯经典算法 不定方程解法 蓝桥杯练习系统 历届试题 买不到的数目

    蓝桥杯经典算法 第六讲 不定方程解法   蓝桥杯算法教学与培训_蓝桥杯经典算法 第六讲 不定方程解法 不定方程的一般解法   朴素算法 public static void main(String[] ...

  2. “蓝桥杯”练习系统——历届试题

    1. 核桃的数量(水题) 思路:求两个数的最大公约数可以用欧几里得算法(辗转相除法),即 a与b的最大公约数 等于 b与(a对b取余) 的最大公约数,当b等于0时,a与b的最大公约数是a.两个数的最小 ...

  3. 蓝桥杯 历届试题 翻硬币(贪心)

    历届试题 翻硬币 时间限制:1.0s   内存限制:256.0MB 问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面( ...

  4. 试题 历届试题 翻硬币(贪心)

    试题 历届试题 翻硬币 资源限制 时间限制:1.0s 内存限制:256.0MB Work hard,Play harder. 问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排 ...

  5. 蓝桥杯 历届试题 翻硬币

    问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:oo*oooo 如果同时翻 ...

  6. 蓝桥杯练习系统习题-历年真题解析1(完整版)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-历年真题解析1 题目搜索方式:Ctrl+F--> 输入题目名称-&g ...

  7. 蓝桥杯练习系统如何正确提交试题(java,c#,c++)

    第一步: 首先打开"蓝桥杯"练习系统官网登录自己的账号,没有账号的进行注册 个人用户注册 选择相应的角色进行登录  完成登录后点击试题集 选择相应的试题入点击进-->点击提交 ...

  8. 蓝桥杯练习系统 基础练习 全部习题 题目及AC代码(包括VIP试题)C++

    蓝桥杯练习系统 基础练习 全部习题ac代码 看在作者这么肝的份上点个赞吧

  9. 蓝桥杯练习系统习题-历年真题解析2(完整版)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-历年真题解析2 题目搜索方式:Ctrl+F--> 输入题目名称-&g ...

最新文章

  1. 链表问题11——两个单链表相交的系列问题(二):找到两个无环链表的交点
  2. [改善Java代码]优先使用整型池
  3. 如何改变UITableViewCell的选中样式(颜色)?storyboard上cell的selection不可用?
  4. Ubuntu下安装FTP服务及使用(VSFTPD详细设置)(二)
  5. L2-014 列车调度(队列模拟:set)
  6. 真正理解 git fetch, git pull 以及 FETCH_HEAD
  7. sort()函数、C++
  8. 超过12000个零件,钢琴就是一部复杂的机器
  9. Android studio真机调试
  10. (86)FPGA同步复位与异步复位-面试必问(十)(第18天)
  11. html5中点击后不发生变化_魔道祖师中资深粉一看就明白的梗,路人见到后都反应不过来...
  12. php国家图书馆opac的marc,国家图书馆OPAC书目信息在图书馆编目中的应用
  13. ajax编辑教程,今天手动编写了一个简易的 ajax 发起器(JavaScript)
  14. 数值计算之 插值法(2)多项式插值——牛顿插值法
  15. lisp 获取横断面数据_那位大神能帮忙写个从CAD图上提取横断面数据提取程序??...
  16. 利用python的requests爬取高清壁纸
  17. 驾驶员监控系统 DMS
  18. Springboot+Vue实现仿课堂派
  19. JavaScript基础知识全总结
  20. jQuery实现可移动(draggable)和可缩放(sizable)网页元素

热门文章

  1. 简单谈谈haskell
  2. IterableThread
  3. Mr.J-- HTTP学习笔记(三)-- HTTP报文
  4. MySQL_(Java)分页查询MySQL中的数据
  5. python-day18(反射)
  6. SQLAlchemy 简单笔记
  7. IOS经常使用的性能优化策略
  8. MYSQL基础(事务,触发器,函数,过程指令操作)
  9. Codeforces Round #381 (Div. 2)
  10. C#。2.1 运算符