news 2026/1/11 4:45:16

打卡信奥刷题(2540)用C++实现信奥 P2070 [USACO13JAN] 刷墙 Painting the Fence B

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(2540)用C++实现信奥 P2070 [USACO13JAN] 刷墙 Painting the Fence B

P2070 [USACO13JAN] 刷墙 Painting the Fence B

题目描述

Farmer John 已经设计了一种方法来装饰谷仓旁边的长栅栏(把栅栏认为是一根一维的线)。他把一只画刷绑在他最喜爱的奶牛 Bessie 身上,之后就去喝一杯冰水,而 Bessie 隔着栅栏来回走,当她走过某个地方,这里的一段栅栏就被刷上了涂料。

Bessie 从栅栏上的位置000开始,并且遵循着一个NNN次移动的次序(1≤N≤1051\le N\le10^51N105)。例如10 L表示 Bessie 向左移动了101010个单位长度,15 R表示 Bessie 向右移动了151515个单位长度。现给出 Bessie 所有移动的列表,Farmer John 想要知道哪些区域的栅栏至少涂了两层涂料(只涂一层涂料的区域可能在大雨中被洗掉)。Bessie 在她的行走中最远到达距起始点10910^9109个单位长度。

输入格式

111行:一个整型数NNN

2∼N+12 \sim N+12N+1行:每行描述了 Bessie 的NNN次移动中的一次,例如15 L

输出格式

111行:被至少涂了两层涂料的区域总数。

输入输出样例 #1

输入 #1

6 2 R 6 L 1 R 8 L 1 R 2 R

输出 #1

6

说明/提示

【样例解释】

Bessie 从位置000开始,向右移动222个单位长度,向左移动666个单位长度,向右移动111个单位长度,向左移动888个单位长度,最后向右移动333个单位长度。

666个单位区域至少被涂了两层涂料,是[−11,−8],[−4,−3],[0,2][-11,-8],[-4,-3],[0,2][11,8],[4,3],[0,2]这些区域。

C++实现

#include<bits/stdc++.h>usingnamespacestd;template<typenameT>inlinevoidread(T&FF){T RR=1;FF=0;charCH=getchar();for(;!isdigit(CH);CH=getchar())if(CH=='-')RR=-1;for(;isdigit(CH);CH=getchar())FF=(FF<<1)+(FF<<3)+(CH^48);FF*=RR;}//快读template<typenameT>voidwrite(T x){if(x<0)putchar('-'),x*=-1;if(x>9)write(x/10);putchar(x%10+48);}//快写constintMAXN=1e5+10;structnode{intl,r;//每次染色的左端点和右端点booloperator<(constnode&b)const{returnl<b.l;//按左端点从小到大排序}}a[MAXN];intposition,ans,lft,rgt,n;intmain(){read(n);for(inti=1;i<=n;i++){intx;chary;read(x);cin>>y;a[i].l=position;if(y=='L')position-=x;//Bessie往左走elseposition+=x;//Bessie往右走a[i].r=position;if(a[i].l>a[i].r)swap(a[i].l,a[i].r);}sort(a+1,a+n+1);//排序lft=a[1].l;rgt=a[1].r;//给lft和rgt赋上初值for(inti=2;i<=n;i++)if(a[i].r>lft){//如果跟可能被覆盖到的区间有交a[i].l=max(a[i].l,lft);//这里是使得之后的代码可以少写一点,因为显然,a[i].l<lft,a[i].l~lft这1段也没有用了if(a[i].r>rgt){//比之前的右端点大ans+=rgt-a[i].l;//从rgt到a[i].llft=rgt;//之前的右端点显然就是左端点,显然,新的可能被覆盖到的区间就是之前的rgt~a[i].rrgt=a[i].r;//更新右端点}else{//比之前的右端点小ans+=a[i].r-a[i].l;//从a[i].r到a[i].llft=a[i].r;//更新左端点}}write(ans);//输出return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/15 11:05:13

11、Terraform与服务器配置管理全解析

Terraform与服务器配置管理全解析 1. 远程状态管理 后端是一种将状态存储在共享环境中的系统,使用相同配置的人都能快速访问。以下介绍如何使用Google Cloud Storage实现: 1. 执行命令 执行以下命令来配置Terraform远程后端: bash terraform remote config -backend…

作者头像 李华
网站建设 2025/12/15 11:04:28

15、Kubernetes 架构与基础操作全解析

Kubernetes 架构与基础操作全解析 1. Kubernetes 逻辑架构概述 当开始接触 Kubernetes 时,首先面临的挑战是在脑海中构建一个关于其内部组件运行方式、位置以及相互连接关系的模型。在理解这个模型的过程中,我们会引入一些关键概念和组件。 Kubernetes 的高层架构主要由一…

作者头像 李华
网站建设 2026/1/8 19:50:56

16、Kubernetes 资源管理:从 Replica Sets 到 Services 的深入解析

Kubernetes 资源管理:从 Replica Sets 到 Services 的深入解析 1. Replica Sets 到目前为止,我们已经了解了如何在 Pod 中部署应用程序。Pod 是一个非常强大的概念,但它缺乏健壮性。实际上,我们无法定义扩展策略,也不能确保在出现问题(例如节点故障)时 Pod 仍然存活。…

作者头像 李华
网站建设 2025/12/15 11:04:15

18、微服务聚合、镜像管理与 CI/CD 搭建全流程指南

微服务聚合、镜像管理与 CI/CD 搭建全流程指南 1. 聚合服务(Aggregator Service) 聚合服务是一种微服务,其主要功能是聚合其他两个或更多的服务,并为消费者提供一个前端 API,从而将背后的所有逻辑封装起来。尽管它并非完美,但这是一种常见的模式,因为它允许我们运用熔…

作者头像 李华
网站建设 2026/1/5 16:33:00

2025年中国合同智能市场的生态演进与崛起

一、市场概览&#xff1a;规模与质变并行2025年&#xff0c;中国合同智能应用市场规模预计约878亿元&#xff0c;增速连续四年超25%。市场已从流程自动化工具&#xff0c;升级为企业的核心风控与战略价值中枢。数据印证了质变&#xff1a;企业合同数字化处理率从2020年的24.6% …

作者头像 李华
网站建设 2026/1/11 1:57:28

10、GNU和UNIX命令使用指南

GNU和UNIX命令使用指南 在GNU和UNIX系统中,命令行操作是一项重要技能。下面将详细介绍命令行的自动补全、变量使用、历史记录管理以及进程控制等方面的知识。 命令行自动补全 在bash中,当你不是在输入第一个单词(命令)时,bash会查找与你所输入内容匹配的文件名。如果只有…

作者头像 李华