首页 > 代码库 > 蓝桥杯 [翻硬币] 贪心
蓝桥杯 [翻硬币] 贪心
题目链接: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; }
蓝桥杯 [翻硬币] 贪心
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。