题目描述

Alice 和 Bob 在玩游戏,两个人分别有一个计分板,记录各自的得分。得分 X 的 字典序严格小于得分 Y,那么就认为得分 X 高于得分 Y。Bob 想要自己的分数高 于 Alice,他选择了自己计分板中一些相邻位置交换。为了不让 Alice 发现,Bob 必须交换尽量少的次数,请写一个程序帮助 Bob。

输入

第一行一个字符串,表示 Bob 的得分,第二行一个字符串,表示 Alice 的得分。 字符串长度均不超过 100,只含小写英文字母。

输出

输出一行,表示最少交换次数。如果无解输出-1。

这个题目本身是不难的,从题目中可以得知bob的字符串是不动的,我们只需要改动alice的字符串使其字典序小于前者。由于字典序是从第一个字母开始比较,所有我们很容易想到用一个循环遍历bob的字符串。我们需要alice的字符串比bob的小,那么就要使alice的字符串从第一个字母开始就要等于或者小于bob的字符串。那么就很明确了,在上文所提到的循环中再遍历alice的字符串寻找对应的字符并移动它使其满足条件。但是在实际操作时我们会发现问题在于我们遍历alice的字符串时如果有和当前bob相同的字符时就停下返回了,我们并不知道后续字符串中有没有比bob当前的字符还要小的字符,也就是我们在操作时要在大循环中再加一个小循环,寻找是否有上述情况的存在,如果有则记录次数,并在循环完成后与其他情况比较。

那么核心部分的伪代码就如下所示:

for(...)  //遍历bob的字符串
{for(...)//遍历alice的字符串{if 相等,移动字符,并记录次数if 小于,记录次数,直接返回次数,程序结束}检测是否一个遍历结束后没有找到对应的字符,也就是alice的字符串中没有比当前遍历到的bob的字符大的字符,那么直接返回-1即可。
}

剩下的事情就是考虑极端情况和特殊情况了,比如alice的字符串或者bob的字符串为空这种极端情况,又或者“abc” 和“abcde”这种或者“acb”和“abc”这种特殊情况。解决了这些问题后程序就写好了。

int scoreboard(string a, string b)
{int count = 0,i,j;bool c = false;vector<int> v;string temp;if (!a.size() || !b.size())//极端情况return -1;for (j = 0; j < b.size(); j++){for (i = j; i < a.size(); i++){if (a[i] < b[j])v.push_back(count + i - j);}for (i = j; i < a.size(); i++){if (a[i] == b[j]){count += i - j;//记录次数temp = a[i];a.erase(i, 1);a.insert(j, temp);//移动字符,模拟相邻两个字符交换的情况break;}else if(a[i]<b[j]){v.push_back(count + i - j);c = true;break;}}if (c)break;if (i == a.size() && j < a.size())//alice的字符串中找不到所对应的字符return -1;else if (i == a.size() && j >= a.size())//此处是为了处理类似“abc”和“abcde”的情况的,这时大循环还在,但小循环已经结束了return count;}sort(v.begin(), v.end());if (v.empty())return -1;elsereturn v.front();
}

计分板-2021安徽省机器大赛程序设计赛道相关推荐

  1. 2022年安徽省机器人大赛——程序设计赛道 第十三届安徽省大学生程序设计大赛————I 玩捉迷藏

    (建议直接观看后面图片,图片更生动哦) 首先看这个题目,这个题目也是比较简单得,最主要就是读懂这个题目,因为我感觉这个题目还是比较绕人的. 首先我们来分析一下题目,"小明可以使用 Cij个航 ...

  2. 【安徽省机器人大赛单片机与嵌入式赛道竞赛】C平台作品

    目录 一.比赛简介 二.赛题说明(详细题目已经收走,凭记忆复现) 1.设计目的: (1)每公里价格(RATE): (2)停车等待计时(TIME): (3)行走里程(KM): (4)行走耗费(FUEL) ...

  3. 7-3 欢迎参加贵工程2021年C语言程序设计大赛! (5 分)

    7-3 欢迎参加贵工程2021年C语言程序设计大赛! (5 分) 贵州工程应用技术学院创建于1938年,历经贵州省立毕节师范学校.毕节半耕半读师范学校.毕节师范专科学校等时期.1993年,教育部定名为 ...

  4. 2021高通人工智能应用创新大赛--创新赛道-决赛阶段小结

    20212021高通人工智能应用创新大赛–创新赛道-决赛阶段小结 一.APP开发应用的问题 目前开发的基于高通SNPE技术的安卓APP,功能部分尚且只能实现封装好的图片进行识别,距离拍照和调用相册进行 ...

  5. 近400万奖金!2021全国人工智能大赛来了

    Datawhale赛事 主办单位:深圳市人民政府.鹏城实验室 全国人工智能大赛自2019年末起,已经成功举办两届.随着2021接近尾声,我们迎来了第三届NAIC大赛--"2021全国人工智能 ...

  6. 沈抚示范区·“华为云杯”2021全国AI大赛圆满落幕

    摘要:以赛促学,赛教结合!驱动AI产业繁荣发展 本文分享自华为云社区<云聚沈抚 · 智赢未来!沈抚示范区·"华为云杯"2021全国AI大赛圆满落幕>,作者:灰灰哒. 近 ...

  7. 4373支队伍报名2020数字中国创新大赛-数字政府赛道 数字战“疫”彰显社会责任...

    2月25日,2020数字中国创新大赛-数字政府赛道进入复赛阶段.根据本赛道承办方--阿里云天池竞赛平台的数据显示,自1月1日赛事报名通道上线至今,共吸引了全球16个国家和地区共计4373支队伍参赛. ...

  8. Pwn2Own 2021温哥华黑客大赛落幕 3个团队并列 Master of Pwn

     聚焦源代码安全,网罗国内外最新资讯! 网络安全界的年度盛事 Pwn2Own 2021 温哥华黑客大赛在今天落下帷幕(当地时间4月6日至8日举行).本年度大赛规模庞大,共有23支队伍参赛,目标涵盖10 ...

  9. 2021年太原理工大学程序设计竞赛等获奖总结

    第45届国际大学生程序设计竞赛(ICPC)昆明站 铜奖1枚,优胜奖2枚 (2021/4/3线上赛) 第45届国际大学生程序设计竞赛(ICPC)银川站 银奖2枚,铜奖2枚 (2021/5/16现场赛) ...

最新文章

  1. 无法启动MySQL数据库
  2. 【阿里云课程】网络深度与宽度如何影响模型性能,如何设计
  3. Web前端技术分享:Javascript中的内置对象数组讲解
  4. html输入框只能输入几个,input 两个input框只能允许同时输入一个
  5. webpack指南-webpack入门-webpack的安装
  6. Qt工作笔记-QListWidget鼠标拖动,一个到另一个,并遍历
  7. 基于vue的nuxt框架cnode社区服务端渲染
  8. 客户关系管理之会员管理(转)
  9. FFmpeg build under MinGW【原创】
  10. 机架服务器显示器,机架式显示器排名_欧仕茄物联
  11. Create Material by BDC and BAPI
  12. 找零钱问题系列之动态规划
  13. web sevice 生成代理类及使用
  14. 创客匠人工具助力教培机构快速适应线上教学
  15. python阿拉伯数字转中文_阿拉伯数字转化为中文数字
  16. 解析函数的孤立奇点-复变函数
  17. 计算机自动保存会存到哪里,电脑自动关机前会自动保存吗
  18. 小程序开发之组件video(视频)
  19. PC向手机进行拨号上网 DUN
  20. mysql查询选修课的人数_mysql查询语句练习

热门文章

  1. java毕业设计小型酒店管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  2. java竹青遍野,女神节专辑 ? 世界亏欠女神太多,还好有你来宠
  3. 【爬虫】爬取某彩票网站的历史数据,并进行分析
  4. java面试宝典下部
  5. 大数据 就业 缺口_中国AI&大数据就业趋势报告:平均月薪超2万,缺口650万人...
  6. 努比亚z17 android8.1,努比亚Z17再获更新 极速体验Android 8.1
  7. 生存游戏计算机,像素生存游戏2电脑版
  8. php 每日一句名人名言,30句关于每日一句,让你每天充满能量的名言
  9. Mac环境下safari浏览器使用selenium
  10. RocksDB(一):What is RocksDB?