zoukankan      html  css  js  c++  java
  • [蓝桥杯]翻硬币(贪心的详解附带题目测试链接)

    传送门

    分析:
    一看到题目要求从已有状态变到目标状态,而且是最小步数,其实很容易想到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;
    }
    
  • 相关阅读:
    字符串题目
    Java 练习题摘录
    数据库原理及应用-引言
    数学类题目
    牛顿法
    动态规划-最大子段和
    判断数幂
    杭电1096
    算法导论01 几种排序以及其时间复杂度01
    杭电2059龟兔赛跑
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12679634.html
Copyright © 2011-2022 走看看