当前位置: 首页 > article >正文

蓝桥杯 2013 省 B 翻硬币

题目背景

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

题目描述

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

输入格式

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

数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。

输出格式

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

输入输出样例

输入 #1复制

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

输出 #1复制

5

输入 #2复制

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

解析:这题用的知识就是两个等长字符串的匹配问题,博主本来看解析审题不认真,还以为每个数据只会有一段需要翻硬币匹配,结果就出现了下面的错误代码(样例都是只有一段需要匹配,所以样例都过了但是一测0分,好险,还好不是正式比赛)

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string stand;cin>>stand;
    string nu;cin>>nu;
    int cnt=0;
    for(int i=0;i<stand.size();i++)
    {
        if(nu[i]!=stand[i])
        {
            if(nu[i+1]!=stand[i+1])
            {
                cnt++;
                cout<<cnt;
                return 0;//因为我以为只需要一段,处理完直接结束代码
            }
            else
            {
                if(nu[i+1]=='*')
                {
                    cnt++;
                    nu[i+1]='o';
                }
                else if(nu[i+1]=='o')
                {
                    cnt++;
                    nu[i+1]=='*';
                }
            }
        }
    }
    return 0;
}

 自己想了许久还没想出来,最后还是问舍友才解决了的,其实也简单,就是需要把串全部遍历了,不能提前结束

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string stand;cin>>stand;
    string nu;cin>>nu;
    int cnt=0;
    for(int i=0;i<stand.size();i++)
    {
        if(nu[i]!=stand[i])//检测到不同开始翻硬币
        {
            nu[i+1]=(nu[i+1]=='*'?'o':'*');//因为遍历过的硬币不需要再用到,所以直接翻下一个就行,建议不会这种“ == ? : ” 写法的学习一下,有时候能很大地精简代码
            cnt++;
        }
    }
    cout<<cnt;
    return 0;//修改之后发现,原来正确的代码比我的错误代码还要精简很多

自我检讨,尤其是蓝桥这种比赛制度,不怕题目简单,就怕自己掉以轻心


http://www.kler.cn/a/560737.html

相关文章:

  • Stm32定时器输出PWM
  • 排序算法解析实现与时间复杂度分析
  • SQL笔记#数据更新
  • 微信小程序:完善购物车功能,购物车主页面展示,详细页面展示效果
  • python安装spacy3.8.3对应的版本zh_core_web_sm3.8.0
  • netty常见的面试问题整理
  • 塔能物联运维保障智慧地下停车场安全与高效
  • 什么是期权垂直价差套利策略?
  • 10种方法教你又小又清晰地压缩视频
  • 在 MySQL 的 InnoDB 存储引擎中,部分数据库优化策略
  • 数据库并发问题有那些以及解决办法
  • 利用 vscode 进行远程开发
  • mongodb的并发优化
  • 蓝桥杯学习笔记04-滑动窗口不定长(最短/最小)
  • SpringBoot3通过拦截器拦截所有的请求-限制IP访问
  • 开源且免费的CMS系统有哪几个可以放心用?
  • Ollama辅助工具在思源笔记中的核心玩法助力实现AI高效创作
  • JavaEE基础之- xml
  • 项目实战--网页五子棋(匹配模块)(4)
  • DevEco Studio常用快捷键以及如何跟AndroidStudio的保持同步