7-3 接话茬 (100分)
小CC最喜欢的就是接话茬,别人说一句,小CC就会接着他的话尾巴继续说下去,然后告诉他这是“顶针”修辞手法,活活将人气死。小XX也喜欢接话茬,每天都要与小CC比较技艺。然而无论是谁,都会被他们活活气死,因此两人总是难决胜负。后来小CC和小XX一起上了厦门大学,学习了校选课《接话茬数学原理与杠精的自我修养》,他们决定对两人的接话茬水平进行定量评估。

他们约定比赛规则如下,随机找一个倒霉的路人,路人说一句话,他们一起来接,他们接的话的前缀可以作为路人说的话后缀的长度就是那句话的水平。比如,别人说“abbbaabbc”,小CC接了一句“abbcefagd”,他所说的话的前缀“abbc”正是路人所说的话的后缀,长度为4,那么小CC的水平就是4;如果小XX说的是“xbbcadf”,无法构成路人所说的话的后缀,因此水平只有0。

现在,他们的比赛正式开始,由你来写一个程序充当裁判。

输入格式:
共三行,每行是一句话,长度均不超过10
​6
​​ 。

第一行是路人说的话。第二行是小CC说的话。第三行是小XX说的话。

输出格式:
仅一行,输出小CC和小XX接的话的水平,以空格分割,行末没有多余空格,以换行结束。

输入样例:
abbaabbc
abbc
xbb
输出样例:
4 0

初级版本

这个版本的代码比较容易想到。但是过测试点的时候随机长串这一测试点过不了。
原因在于在获得得分代码编写的时候,前后缀的长度是从i开始(也就是1),也就是说需要遍历完整个for循环,最后得到的分数才是最大长度。
当字符串过于长的时候,显然,运行时间得不到满足。

#include<iostream>
#include<string>
using namespace std;
int main(){string passer,cc,xx;//分别记录路人cc,xx的话cin>>passer>>cc>>xx;int min_pc=passer.size()>cc.size()?cc.size():passer.size();//记录路人和cc的最小长度int min_px=passer.size()>xx.size()?xx.size():passer.size();//记录路人和xx的最小长度int score_cc,score_xx;//记录cc和xx的得分(即它们前缀能匹配到路人的后缀的最长长度)//计算cc的得分for(int i=1;i<=min_pc;i++){string c=cc.substr(0,i);//截取cc长度为i的前缀string p=passer.substr(passer.size()-i,i);//截取路人长度为i的后缀if(c==p){score_cc=i;}}//计算xx的得分for(int i=1;i<=min_px;i++){string x=xx.substr(0,i);//截取xx长度为i的前缀string p=passer.substr(passer.size()-i,i);//截取路人长度为i的后缀if(x==p){score_xx=i;}}cout<<score_cc<<" "<<score_xx;
}

修改版本

那可不可以加一个什么条件让尽早退出for循环并找到最大长度呢?
很简单。只需要将i从最大值依次递减遍历即可。当满足if中的条件时即可跳出。
请看下面的实现:

#include<iostream>
#include<string>
using namespace std;
int main(){string passer,cc,xx;//分别记录路人cc,xx的话cin>>passer>>cc>>xx;int min_pc=passer.size()>cc.size()?cc.size():passer.size();//记录路人和cc的最小长度int min_px=passer.size()>xx.size()?xx.size():passer.size();//记录路人和xx的最小长度int score_cc,score_xx;//记录cc和xx的得分(即它们前缀能匹配到路人的后缀的最长长度)//计算cc的得分for(int i=min_pc;i>0;i--){string c=cc.substr(0,i);//截取cc长度为i的前缀string p=passer.substr(passer.size()-i,i);//截取路人长度为i的后缀if(c==p){score_cc=i;break;//如果满足,直接跳出}}//计算xx的得分for(int i=min_px;i>0;i--){string x=xx.substr(0,i);//截取xx长度为i的前缀string p=passer.substr(passer.size()-i,i);//截取路人长度为i的后缀if(x==p){score_xx=i;break;//如果满足,直接跳出}}cout<<score_cc<<" "<<score_xx;
}

7-3 接话茬 (100分)(简洁易懂的代码含思路分析)相关推荐

  1. CSP201609-3(炉石传说)(Java 100分)(只有78行代码)

    问题描述 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示).游戏在一个战斗棋盘上进行 ...

  2. 华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

    一.题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏. 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格,然后获得一次选房子的机会,直到所有房子都被选完,房子最多的人获胜. 跳房子的过程 ...

  3. 华为OD机试真题 Java 实现【二维伞的雨滴效应】【2023 B卷 100分】,附详细解题思路

    目录 一.题目描述 二.输入描述 三.输出描述 四.解题思路 五.Java算法源码 六.效果展示 1.输入 2.输出 3.说明 大家好,我是哪吒. 做技术,我是认真的,立志于打造最权威的华为OD机试真 ...

  4. CCF 分蛋糕(满分代码 + 解题思路 :模拟)201703-1

    题目描述 解题思路 从第一个拿蛋糕的人开始枚举,每一轮迭代表示一个人拿蛋糕的过程(不论这个人是否能拿到>=k的蛋糕,他一定会拿到蛋糕,所以能拿到蛋糕的同学数量+1) 根据累计这个人拿蛋糕的分量是 ...

  5. CCF201503-1 图像旋转(100分)【数学计算】

    试题编号: 201503-1 试题名称: 图像旋转 时间限制: 5.0s 内存限制: 256.0MB 问题描述: 问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度. ...

  6. CCF201712-3 Crontab(100分)【模拟+文本处理】

    样例输入 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * Sat,Sun go_to_bed 15 12,18 * * * hav ...

  7. CCF201612-1 中间数(解法三)(100分)(废除!!!)

    试题编号: 201612-1 试题名称: 中间数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一个整数序列a1, a2, -, an中,如果存在某个数,大于它的整数数量等 ...

  8. CCF201412-4 最优灌溉(解法二)(100分)【废除!!!】

    试题编号: 201412-4 试题名称: 最优灌溉 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井, ...

  9. CCF201412-4 最优灌溉(100分)

    试题编号: 201412-4 试题名称: 最优灌溉 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井, ...

最新文章

  1. 全国志愿信息服务器,全国志愿者服务信息系统官网登录,2020全国志愿者服务信息系统官网登录注册入口预约 v1.0-手游汇...
  2. npm安装教程 集成npm webpack vue-cli
  3. 【dfs】I Like Matrix!
  4. django 模板继承与重写
  5. 电脑c语言怎么调出来的,c语言系统源代码_C语言判断系统版本的代码怎样将值调出来啊...
  6. leetcode 旋转数组
  7. 俄罗斯方块-C语言-详注版
  8. ubuntu18下vnpy1.9.2的安装
  9. Ceres-Solver库入门
  10. C++进阶教程之文件和流
  11. GPUImage实现水印
  12. Holt-Winters-季节性预测算法
  13. 联想Thinkpad sl400 7HC入手感觉
  14. 英特尔服务器主板型号哪里看,intel cpu型号参数如何查看
  15. 2017计蒜之道初赛第四场-商汤科技的安全令牌
  16. studio无法重命名(can not rename root module)
  17. Java 服务接入 OpenTracing(2) -- Java 项目快速接入 OpenTracing
  18. netty 远程主机强迫关闭了一个现有的连接。
  19. 直观认识Windows
  20. 咸鱼的 GitHub 情报 | 20200103 期

热门文章

  1. 根文件制作:ramdisk.image.gz和uramdisk.image.gz文件转换,修改文件系统内容
  2. Web前端成都培训机构
  3. 四个小诀窍 告诉你雪景怎么拍才能更好看
  4. 20140722-百度质量部测试开发工程师-实习面试
  5. 2017JAVA秋招总结
  6. 一年级课程表(3月21日-3月25日)
  7. 什么是好的大学生活?
  8. 鸿蒙系统操作界面跟苹果很像,鸿蒙界面提前“泄密”,安卓和苹果的结合体,但内核已经换了!...
  9. Python可视化数据分析03、jieba【分词】
  10. qt listwidget 关键字颜色_seo关键字优化工具如何收费