码迷,mamicode.com
首页 > 其他好文 > 详细

蓝桥杯 [翻硬币] 贪心

时间:2017-07-22 23:40:58      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:不同   string   cin   做了   方案   style   i++   blog   names   

题目链接:http://lx.lanqiao.cn/problem.page?gpid=T29

题目大意:给两个串,初始串和目标串,每一位表示硬币的正反状态。一次操作的定义是让两个相邻的硬币反面。问从初始状态到目标状态所需要的最少操作次数是多少。

关键思想:贪心。要知道如果两个串的某一位不同,那这一位必然要经历奇数次操作,而且先翻或者后翻是没有影响的。那你想,既然是奇数次,那么最好的情况就是一次搞定啊。解决方案是有的,也很容易想——从左到右扫描,一旦扫描到一位不同,就执行一次操作,而此后的所有操作不会再影响这个硬币。而且这样子的话,后面本来需要进行操作的可能顺便和前面的一次做了。也容易理解这种情况就是操作次数做少的。

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    string a,b;
    cin>>a>>b;
    int cnt=0;
    for(int i=0;i<a.size();i++){
        if(a[i]!=b[i]){
            a[i+1]=a[i+1]==*?o:*;
            cnt++;
        }
    }
    cout<<cnt<<endl;
    return 0;
} 

 

蓝桥杯 [翻硬币] 贪心

标签:不同   string   cin   做了   方案   style   i++   blog   names   

原文地址:http://www.cnblogs.com/G-M-WuJieMatrix/p/7223154.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!