坏掉的项链(洛谷P1203题题解,C++语言描述)
题目要求
题目链接
分析
链子是循环的,随便选一点断开不合适,所以把它作为一个线性的字符串其实不好。
处理方法是将字符串扩增一倍,即necklace += necklace;
这样的话,我们从初始出发,必然能遍历整个链子且不受出发点的影响。
我的思路类似于非递归的斐波那契数列,设置一个prev一个temp,比较result和prev+temp的大小,取最大值。
遍历的时候细节有很多:
- 先初始化prev,要小心w作为开头,因为w相当于邻近的r或b
- 每一轮都考虑当前r或b,尽可能多地取,包含w也取下来,统计temp
- result=max(result,temp+prev)result = max(result, temp+prev)result=max(result,temp+prev)
- 更新prev,不能更新为temp,而还要考虑到本轮初始的i前面的w,所以要加上
于是乎,我WA了三个数据点,如下:
测试用例2输入:
3
rrr
测试用例2输出:
3
测试用例4输入:
17
wwwwwwwwwwwwwwwww
测试用例4输出:
17
测试用例6输入:
8
rrwwwwbb
测试用例6输出:
8
分别是三处细节问题,本质是一样的,即我没有考虑到一遍就跑完的情况,重复导致额外多加了很多。
处理方法是补充原则性判断 i<ni < ni<n 和 temp+prev≤ntemp+prev ≤ ntemp+prev≤n
代码有注释,自行食用!
推荐好的题解,但确实难懂,各位大神耗子尾汁。
AC代码
#include <iostream>
#include <cmath>using namespace std;int main() {int n, prev = 0, temp, result, i = 0, j;string necklace;cin >> n >> necklace;// 复制一份necklace += necklace;char prev_c, temp_c;// 合并最初的wwhile ((necklace[i] == 'w') && i < n) {prev++;i++;}// 初始化找出第一个prev 包含当前或wprev_c = necklace[i];// 限制防止跑两遍while ((necklace[i] == prev_c || necklace[i] == 'w') && i < n) {prev++;i++;}result = prev;// 否则会双倍if (i < n) {// 正式开始遍历for (; i < 2*n;) {temp = 0;temp_c = necklace[i];// 反向遍历找出前方w数j = i-1;// 合并之前的wwhile (necklace[j] == 'w') {j--;}j = i-j-1;// 找出当前temp 包含当前或wwhile (necklace[i] == temp_c || necklace[i] == 'w') {temp++;i++;}if (temp+prev <= n) {result = max(result, temp+prev);}// 由于每一个temp只考虑它和它后面的w,不考虑前面的w,所以当变成prev前要把当前temp的数量加上之前的w个数prev = temp+j;}}cout << result;return 0;
}
坏掉的项链(洛谷P1203题题解,C++语言描述)相关推荐
- 花生采摘(洛谷P1086题题解,Java描述)
题目要求 P1086题目链接 分析 这个题是强行规定的贪心,就很简单啦.只需要排个序,逐一尝试即可. 每次都要试图跳到下一个格子,试一试过去消耗的距离加上从新位置到跳回路边的距离和会不会超出限制. 是 ...
- 线性存储的最短平均检索时间(洛谷P1253题题解,Java语言描述)
题目要求 P1253题目链接 分析 很像 ~洛谷P1223题题解~,也是一种类似SJF的贪心法. 排个序,由于两个不大于10000的数,乘起来还是int,就使用int属性吧. 数据量小,所以Scann ...
- 队列模拟约瑟夫问题(洛谷P1996题题解,Java语言描述)
题目要求 P1996题目链接 分析 以前就研究过"约瑟夫环"问题: <单循环链表求解约瑟夫环问题(Java语言描述)> <杀人游戏~约瑟夫环(洛谷P1145题题解 ...
- 贪心策略摘果子(洛谷P1478题题解,Java语言描述)
题目要求 P1478题目链接 分析 本题的低配版题目链接 → 题解 那个题就是纯水题没啥可写的,我除了贴代码无话可说,但这题吧,虽然不算难,但也可一说. 建议大家移步这里 → 精辟题解 这位爷写了本题 ...
- 花式模拟【栈结构】做“日志分析”(洛谷P1165题题解,Java语言描述)
题目要求 P1165题目链接 分析 标准的栈结构,但使用数组来模拟会更简单. 因为对于这个问题,其实数组不需要存储真实数值,只考虑当前最大值就行了. 毕竟,出栈也不需要返回当前真实值. 另外,我们只使 ...
- 麦森数(洛谷P1045题题解,Java语言描述)
题目要求 题目链接 分析 这题挺经典的,快速幂取模算法,如果求出大数再取模就可能T掉. 之前有篇文章写了这个算法:<快速幂算法详解&&快速幂取模算法详解> 既然是Java, ...
- N进制正反累加判回文数(洛谷P1015题题解,Java语言描述)
题目要求 P1015题目链接 分析 开始的时候写了这么一个代码,应该是比较基础的,是十进制的. private static void low() {Scanner scanner = new Sca ...
- 修改数组(洛谷P7285题题解,C++语言描述)
题目要求 P7285题目链接 分析 这题虽然是红题,但是因为很有趣且是 Special Judge ,所以写篇题解. 乍一看,这题好麻烦啊,要综合考虑xxx和yyy,达到x−yx-yx−y的最优化. ...
- 枚举求解单词方阵(洛谷P1101题题解,Java语言描述)
题目要求 P1101题目链接 分析 可以用DFS做,但我立下了个Flag,所以就用了朴素的枚举来做.... 结果,我的天哪,做了好几个小时-- 其实这种地图题,真的适合 DFS or BFS or D ...
最新文章
- ecshop安装linux7,RedHat下如何搭建ecshop?
- CSS中zoom和scale的区别
- 计算机视觉开源库OpenCV之平滑、模糊和滤波
- geth访问节点_以太坊客户端Geth控制台使用及 Web3.js 使用实战
- ecshop轻松实现不同商品调用不同模板
- android web developer,Growth: 一个关于如何成为优秀Web Developer 的 App
- Windows Bash on Ubuntu
- 并发编程---死锁||递归锁---信号量---Event事件---定时器
- JEESZ-Zookeeper集群安装
- windowsxp主题包把windowsXP主题改成Windows7风格
- TUIO之TuioDemo
- 计算机主机有异响,电脑主机有异响怎么办?电脑主板有异响的原因和解决方法...
- 测试适合眉形的软件_扫一扫测眉毛 测试适合眉型的软件
- spring cloud聚合项目打jar包报错
- nginx 域名重定向跳转至另一个域名
- 个人支付宝/微信/云闪付/商户聚合码/银行卡等到账通知常用技术方案总结
- 心里窝火无语的图片_失望无语的图片文字说说心情
- July, 19(R)
- 如何查看html源码和其它网页信息
- 让PyQt5更加美观
热门文章
- 在elementUI中使用 el-autocomplete 实现远程搜索的下拉框
- 基于深度学习的中文语音识别系统框架(pluse)
- [BZOJ 5072]小A的树
- 学习笔记:MySQL字符串类型
- SSAS parent/child dimension
- servlet/filter/listener/interceptor区别与联系(转)
- 分治法在求解凸包问题中的应用(JAVA)--快包算法
- 微信小程序入门的一些建议,替大家踩坑
- api商品分享源码_谈谈微服务中的 API 网关(API Gateway)
- mysql sql running no_【MySql】复制出现Slave_SQL_Running: No 错误解决