蓝桥杯 [翻硬币] 贪心

Posted 哇咔咔咔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯 [翻硬币] 贪心相关的知识,希望对你有一定的参考价值。

题目链接: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;
} 

 

以上是关于蓝桥杯 [翻硬币] 贪心的主要内容,如果未能解决你的问题,请参考以下文章

第四届蓝桥杯第八题 翻硬币

翻硬币 -- 蓝桥杯

蓝桥杯 矩阵翻硬币

蓝桥杯--矩阵翻硬币

2013蓝桥杯

蓝桥杯 历届试题 PREV-34 矩阵翻硬币