zoukankan      html  css  js  c++  java
  • 翻硬币

    翻硬币


    问题描述

    小明正在玩一个“翻硬币”的游戏。

    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

    比如,可能情形是:**oo***oooo

    如果同时翻转左边的两个硬币,则变为:oooo***oooo

    现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

    我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

    输入格式

    两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

    输出格式

    一个整数,表示最小操作步数。

    样例输入1
    **********
    o****o****
    样例输出1
    5
    样例输入2
    *o**o***o***
    *o***o**o***
    样例输出2
    1

    Algorithm

    题目标签是贪心算法,但是我们可以利用另外一种思想来解决问题:自动机。

    这道题目是一个简单的有限自动机:https://baike.baidu.com/item/%E6%9C%89%E9%99%90%E8%87%AA%E5%8A%A8%E6%9C%BA/8700995?fr=aladdin 

    这个灵感来源于洛谷的一个统计单词的题目:https://www.luogu.org/problemnew/solution/P1308

    题目比较简单,上代码。


    AC

     1 /*
     2 * 虽说是贪心算法,但是我在洛谷看见过一篇
     3 * 统计单词个数的算法,用到了有限自动机的
     4 * 思想,这里也拿来试试
     5 * https://baike.baidu.com/item/%E6%9C%89%E9%99%90%E8%87%AA%E5%8A%A8%E6%9C%BA/8700995?fr=aladdin 
     6 */
     7 #include<iostream>
     8 #include<string>
     9 
    10 #define flipud(a) (a == 'o')?'*':'o';
    11 
    12 using namespace std;
    13 
    14 int solve(string a, string b)
    15 {
    16     // 自动机:逐个字符对比,相同则他们的状态为不变,反之变化,计数+1 
    17     // char S[2] = {'*', 'o'};    // 题目比较简单,状态集可以不要 
    18     int len = a.size(), c = 0;
    19     for(int i=0;i<len-2;i++){
    20         if(a.at(i) != b.at(i)){
    21             b.at(i+1) = flipud(b.at(i+1));
    22             c++;
    23         }
    24     }
    25     c += (*(a.end()-1) == *(b.end()-1))?0:1;
    26     return c;
    27 }
    28 
    29 int main()
    30 {
    31     string x, y;
    32     while(cin>>x>>y)
    33     {
    34         cout<<solve(x, y)<<endl;
    35     }
    36     
    37     return 0;
    38  } 
    View Code
     
  • 相关阅读:
    1、第一个JSP
    eclipse汉化
    学习计划与目标
    还在用系统自带的?那你那就OUT了!
    zabbix api调用
    C#中使用泛型对照使用通用基础类型效率减少近一倍
    Android应用架构之MVP---&gt;天气实例
    JavaFX打包到Android上
    2015 Multi-University Training Contest 3
    用Android Studio 执行ndk 程序
  • 原文地址:https://www.cnblogs.com/mabeyTang/p/10268720.html
Copyright © 2011-2022 走看看