[蓝桥杯]翻硬币(贪心的详解附带题目测试链接)

传送门

分析:
一看到题目要求从已有状态变到目标状态,而且是最小步数,其实很容易想到bfs。但是结合数据,那么最坏会有2^1000种状态。那我们会想到这肯定是一道规律题,或者说,贪心。

思路:
举个栗子,下面两个字符串
o##和###
一、 初始字符串的第一个字符一定会被翻一次。也就是说,不管结果怎样,前两个字符一定会翻一次。也不是两次,因为多翻就等于没翻。
二、那现在就变成了#o#和###。那么我们已经不用管第一个字符了,它已经相同了扔掉就好了。也就是o#和##。重复第一步。

结论
我们只需要从前往后看,不同我们就把它和下一个字符翻面,因为它一定要翻!这样一定是最优的。
最后给大家一句话
“贪心法总是不在乎过程,只在乎结果。”

代码

#include <bits/stdc++.h>
using namespace std;
string a,b;
int main()
{
	cin>>a>>b;
	int ans=0;
	for(int i=0;i<a.length();i++)
	{
		if(a[i]!=b[i])
		{
			if(a[i]=='o')	a[i]='*';
			else	a[i]='o';
			if(a[i+1]=='o')	a[i+1]='*';
			else	a[i+1]='o';
			ans++;
		}
	}
	cout<<ans;
}
posted @ 2020-02-12 20:25  倾叶子佮  阅读(151)  评论(0编辑  收藏  举报