• 翻硬币


    问题 J: 翻硬币

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 19  解决: 3
    [提交] [状态] [讨论版] [命题人:外部导入]

    题目描述

    小明正在玩一个“翻硬币”的游戏。
    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。
    比如,可能情形是:**oo***oooo
    如果同时翻转左边的两个硬币,则变为:oooo***oooo

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

    我们约定,翻动相邻的两个硬币为一步操作。

    输入

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

    输出

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

    样例输入 Copy

    **********
    o****o****

    样例输出 Copy

    5




     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 int main(){
     5     int hash[1000];//用来记录不同的字符所在的位置 
     6     memset(hash, 0, sizeof(hash));
     7     string s1, s2;
     8     cin >> s1 >> s2;
     9     for(int i = 0; i < s1.size(); i++){
    10         if(s1[i] != s2[i]){
    11             hash[i] = 1;//位置不同则计为1 
    12         }
    13     }
    14     int flag = -1;
    15     int ans = 0;
    16     for(int i = 0; i < s1.size(); i++){
    17         if(hash[i] == 1){
    18             if(flag == -1){
    19                 flag = i;//记录第一个不同硬币的位置 
    20             }else{
    21                 ans += i - flag;//将第二个硬币位置到第一个硬币位置加入反转次数集中 
    22                 flag = -1;
    23             }
    24         }
    25     }
    26     cout << ans;
    27     return 0;
    28 }
  • 相关阅读:
    JS学习笔记ZT
    一条经典的汇总的sql
    sql 日期的转换
    微软.net安装失败时出现的问题
    sql 换行
    js 代码
    学习笔记
    decimal 的使用
    功能最完善,代码最简洁的选项卡代码(div+css)
    sql字母排序
  • 原文地址:https://www.cnblogs.com/AGoodDay/p/10564932.html
Copyright © 2020-2023  润新知