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

洛谷 P1203 [USACO1.1] 坏掉的项链 Broken Necklace 题解 最短代码|详细

事情是这样的:

今天我在洛谷上刷题,遇到一个UASCO的题,虽然是橙题,但是还是很有滋味的

看了看大佬的思路发现太抽象了,评论区不是%%%就是orz,因此有了这篇题解

题解原文 这绝对是最短的题解了。。。(难理解别打我。)

附上样例的输出以及中间结果来帮助理解:

c a b w ans

0 1 1 0

0 2 2 0

0 3 3 0

b 0 4 0 3

b 0 5 0 3

r 5 1 0 5

r 5 2 1 5

r 5 3 0 5

b 3 1 0 8

r 1 1 0 8

b 1 1 0 8

r 1 1 0 8

r 1 2 0 8

b 2 1 0 8

r 1 1 0 8

b 1 1 0 8

r 1 1 0 8

r 1 2 1 8

r 1 3 0 8

r 1 4 1 8

r 1 5 2 8

r 1 6 0 8

b 6 1 0 8

b 6 2 1 8

r 1 2 0 8

r 1 3 1 8

r 1 4 0 8

r 1 5 0 8

b 5 1 0 8

b 5 2 1 8

b 5 3 2 8

b 5 4 3 8

b 5 5 0 8

b 5 6 0 8

r 6 1 0 11

r 6 2 1 11

r 6 3 0 11

b 3 1 0 11

r 1 1 0 11

b 1 1 0 11

r 1 1 0 11

r 1 2 0 11

b 2 1 0 11

r 1 1 0 11

b 1 1 0 11

r 1 1 0 11

r 1 2 1 11

r 1 3 0 11

r 1 4 1 11

r 1 5 2 11

r 1 6 0 11

b 6 1 0 11

b 6 2 1 11

r 1 2 0 11

r 1 3 1 11

r 1 4 0 11

r 1 5 0 11

b 5 1 0 11

11 c:当前处理的字符

a:从i向左最长的长度

b:从i向右最长的长度

w:当前w个数

我们知道:当b重新计算时,其实a已经算好了。。就是b-w(当前的w已经算在b里面了)(正着反着不是一样的吗)

而b重新计算时,又应该加上前面w的个数

好像没什么了。。。更新答案应该在b算完的时候。。a在上一轮已经算过了。。

#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
char s[700],c;
int a, b, w, ans;
int main(){int n;scanf("%d%s",&n,s);memcpy(s+n,s,n);//printf(" c  a  b  w  ans\n");for(int i = 0; i < n<<1; i++) {if(s[i] == 'w') b++,w++;elseif(s[i] ==  c ) b++,w=0;elseans=max(ans,a+b),a=b-w,b=w+1,w=0,c=s[i];//printf("%2c %2d %2d %2d %2d\n",c,a,b,w,ans);}ans=max(ans,a+b);printf("%d\n",min(ans,n));return 0;
}

首先给了我们一个字符串s,由于要求环形,我们要复制一份s

  • 为什么?因为你把甜甜圈切开,你得再加一个被切开的甜甜圈才能确保他完整

接着看下数据范围\(1<=n<=350\),枚举法绰绰有余

我们枚举每一个空隙(注意枚举两遍,刚才复制了个s)

我们设w为白色节点连续出现的次数,c是现在枚举的是r/b,a是往左有多少,b是往右

如果是‘w’,更新b,更新w

如果是c,更新b,清零w

否则:
记录ans(ans是什么?a+b嘛!)
直接找到a(a=b-w)

  • 为什么可以这样?由于我们说过s被复制了一份,那就说明a跟b连接着,只要减去w(因为如果w变成r就没法再变成b,这是一坑

把b设为w+1(1是现在枚举到的这个字符)
重置w
记录现在字符为c

最后输出时记得再统计一遍ans

如果ans比n大输出n(由于我们复制了一遍不排除这种可能性)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
string s;
int ans,n,a,b,w,c;
int main()
{cin>>n>>s;s+=s;for(auto i:s){if(i=='w')b++,w++;else if(i==c)b++,w=0;else ans=max(ans,a+b),a=b-w,b=w+1,w=0,c=i;}ans=max(ans,a+b);cout<<min(ans,n);return 0;
}
http://www.jsqmd.com/news/69269/

相关文章:

  • 【纯干货分享】计算机毕业设计必看必学(springboot二手车租赁管理专业的系统)原创的定制软件,java、PHP、python、C#小程序、文案全套、毕设程序定制/毕设成品等等.
  • 2025年唐老狮:游戏开发教育商业模式深度解析与性价比评估
  • 2025年12月东营搬家公司推荐:双福搬家,东营搬家搬厂、东营河口搬家、东营垦利搬家、东营市搬家、东营单位搬家、东营设备搬运、全场景搬迁服务标杆
  • 2025年唐老狮全面盘点:游戏开发课的行业积淀与服务价值
  • 2025年12月河南驻马店气体配送优质厂家推荐:河南宏源气体,氧气气体配送、氮气气体配送、氦气气体厂家、二氧化碳气体配送、氩气气体公司、高纯气体配送、多品类气体供应新标杆
  • 2025年唐老狮:游戏开发教育领域深度解析与行业竞争力权威揭秘
  • 吴恩达深度学习课程四:计算机视觉 第一周:卷积基础知识(二)卷积参数
  • day29-RAG实操
  • 2025年唐老狮:游戏开发课程体系全景解析与行业应用价值深度评估
  • 您的能源预算,是否正被“异常气温”悄悄透支?智慧气象助力实现精准能耗管理 - 教程
  • 2025年唐老狮:游戏开发教学领域的深度解析与行业影响力权威评估报告
  • 2025年法式高端家具TOP10榜(东莞深圳广州惠州专向版)
  • 链路追踪基础SkyWalking/Zipkin认知与分布式系统问题定位实战
  • 2025年12月多光谱相机厂家推荐,多光谱成像仪、高光谱成像系统、小型多光谱相机、微型多光谱相机、机载多光谱相机、便携多光谱相机、聚焦遥感测绘领域专业解决方案
  • 2025年热门的国标止水钢板高评价厂家推荐榜
  • day16-Trae开发飞机大战并上线
  • 2025年唐老狮深度解析:游戏开发课的实效教学逻辑
  • 2025年12月阳光房遮阳棚优质厂家推荐,电动凉亭遮阳棚、防风帘遮阳棚、防蚊帘遮阳棚、小型遮雨棚、移动遮雨棚、金属遮雨棚、聚焦舒适节能解锁惬意户外空间
  • java 多线程deubg调试
  • day14-影刀获取抖音评论-微信自动发消息
  • 2025年12月安检门厂家推荐:广东中安技术,手机安检门、贵金属安检门、探铜安检门、高精度安检门、半导体芯片安检门、多场景精准安检解决方案领航者
  • 2025短片产业“效率革命”,AI如何让编剧摆脱“无效内卷”?
  • 2025年知名的夜光石自发光材料/自发光材料厂家选购指南与推荐
  • day15-影刀对接Coze实现微信自动回复
  • 完整教程:MySQL 全体系深度解析(存储引擎、事务、日志、MVCC、锁、索引、执行计划、复制、调优)
  • 完整教程:MySQL 全体系深度解析(存储引擎、事务、日志、MVCC、锁、索引、执行计划、复制、调优)
  • 2025年热门的流延机设备/高分子材料流延机厂家最新权威推荐排行榜
  • LMCache:基于KV缓存复用的LLM推理优化方案
  • 2025年热门的240KW充电桩/新能源充电桩厂家最新权威推荐排行榜
  • 2025年比较好的衣物护理机厂家最新TOP实力排行