AtCoder Beginner Contest 265 D Iroha and Haiku (New ABC Edition)

news/2024/4/27 20:36:03/文章来源:https://www.cnblogs.com/xiaocaibiancheng/p/16615976.html

\(O{(n\log n)}\) 做法

我在考场上只想到此做法,不难想到,可以将三段用二分预处理。
\(xs[i]\)表示从\(a_i\)开始总和为\(P\)的末尾编号,可以用二分处理。
最后 \(O(n)\) 判断即可。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=2e5+5;
const ll INF=0x3f3f3f3f;
ll n,x,y,z;
ll a,s[N];
ll xs[N],ys[N],zs[N];
int main(){scanf("%lld%lld%lld%lld",&n,&x,&y,&z);for(ll i=1;i<=n;i++){scanf("%lld",&a);s[i]=s[i-1]+a;}for(ll i=1;i<=n;i++){ll l=i,r=n;while(l<=r){ll mid=(l+r)/2;ll num=s[mid]-s[i-1];if(num>x) r=mid-1;else if(num<x) l=mid+1;else{l=mid;break;}}ll num=s[l]-s[i-1];if(num==x) xs[i]=l;else xs[i]=INF;}for(ll i=1;i<=n;i++){ll l=i,r=n;while(l<=r){ll mid=(l+r)/2;ll num=s[mid]-s[i-1];if(num>y) r=mid-1;else if(num<y) l=mid+1;else{l=mid;break;}}ll num=s[l]-s[i-1];if(num==y) ys[i]=l;else ys[i]=INF;}for(ll i=1;i<=n;i++){ll l=i,r=n;while(l<=r){ll mid=(l+r)/2;ll num=s[mid]-s[i-1];if(num>z) r=mid-1;else if(num<z) l=mid+1;else{l=mid;break;}}ll num=s[l]-s[i-1];if(num==z) zs[i]=l;else zs[i]=INF;}for(ll i=1;i<=n;i++){if(xs[i]>=n) continue;if(xs[i]==INF) continue;if(ys[xs[i]+1]>=n) continue;if(ys[xs[i]+1]==INF) continue;if(zs[ys[xs[i]+1]+1]==INF) continue;printf("Yes");return 0;}printf("No");return 0;
}

\(O{(n)}\) 做法

不难发现,以上做法是有点浪费的,每个节点需分别计算,其实可以线性\(O(n)\)一次计算出\(n\)个节点。
添加一个指针,如果区间里的值小于目标值,则指针往右移。
因为指针最多移\(n\)次,所以这个算法是线性的。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=2e5+5;
const ll INF=0x3f3f3f3f;
ll n,x,y,z,xp,yp,zp;
ll a,s[N];
ll xs[N],ys[N],zs[N];
int main(){scanf("%lld%lld%lld%lld",&n,&x,&y,&z);for(ll i=1;i<=n;i++){scanf("%lld",&a);s[i]=s[i-1]+a;}for(ll i=1;i<=n;i++){while(xp<n&&s[xp]-s[i-1]<x) xp++;if(s[xp]-s[i-1]==x) xs[i]=xp;else xs[i]=INF;}for(ll i=1;i<=n;i++){while(yp<n&&s[yp]-s[i-1]<y) yp++;if(s[yp]-s[i-1]==y) ys[i]=yp;else ys[i]=INF;}for(ll i=1;i<=n;i++){while(zp<n&&s[zp]-s[i-1]<z) zp++;if(s[zp]-s[i-1]==z) zs[i]=zp;else zs[i]=INF;}for(ll i=1;i<=n;i++){if(xs[i]>=n) continue;if(xs[i]==INF) continue;if(ys[xs[i]+1]>=n) continue;if(ys[xs[i]+1]==INF) continue;if(zs[ys[xs[i]+1]+1]==INF) continue;printf("Yes");return 0;}printf("No");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_2570.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

延时任务-基于redis zset的完整实现

所谓的延时任务给大家举个例子:你买了一张火车票,必须在30分钟之内付款,否则该订单被自动取消。订单30分钟不付款自动取消,这个任务就是一个延时任务。 我之前已经写过2篇关于延时任务的文章:《完整实现-通过DelayQueue实现延时任务》 《延时任务(二)-基于netty时间轮算…

workbench小技巧——结合paraview

workbench计算完结果后,可以在计算完成的Temperature(或者其他的结果也可以)右键->Export...->STL File将其保存成文.stl格式的文件,并且如果在workbench中是半剖视图,那么生成的.stl格式的文件也是半剖视图。 半剖视图的.stl格式的文件可以在paraview中打开: 这样…

创建一个VUE项目

前期准备 1、安装node,官网安装(自带npm) 2、安装npm国内镜像cnpm:npm install -g cnpm;安装后可能在项目中无法使用,执行cnpm install express -g 3、安装开源前端打包工具webpack:cnpm install webpack -g 4、安装vue-cli脚手架工具:cnpm install vue-cli -g;使用vu…

校园内的汽车

https://www.acwing.com/problem/content/description/1587/思路: 电话记录的模型,先筛选出所有符合要求的记录,之后按照题目要求做即可。 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_map> #include <ve…

如何让discuz论坛下方在线会员不显示在线会员

如何让discuz论坛下方在线会员不显示在线会员-百度经验 https://jingyan.baidu.com/article/4b07be3c6b143848b380f382.html如何让discuz论坛下方在线会员不显示在线会员呢? 后台界面设置,论坛缩略显示在线列表选择是(一般超过500在线会员会自动隐藏的)如下图所示:

Discuz!抱歉,您的IP 地址不在允许范围内办法

Discuz!抱歉,您的IP 地址不在允许范围内办法-百度经验 https://jingyan.baidu.com/article/ce436649394f183773afd305.html今天早上很郁闷呀,打开论坛发现竟然登陆不了,提示以下的问题: Discuz!x3.2 抱歉,您的 IP 地址不在允许范围内,或您的账号被禁用... 这是什么鬼,明…

TCP/UDP

一、定义和对比 TCP/UDP都是是传输层协议,但是两者具有不同的特性,同时也具有不同的应用场景,下面以图表的形式对比分析。 二、使用场景什么时候应该使用TCP?当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP…

项目准备

项目导入 资料连接:https://pan.baidu.com/s/1Xp97dflG_i1a8DyTKJWAjg   提取码:java 选择项目的pom.xml文件导入 项目启动 第一种方式:第二种方式: 启动Maven: 技术选型Web层Servlet:前端控制器html:视图Filter:过滤器BeanUtils:数据封装Jackson:json序列化工具 S…

论文阅读笔记-MapLite 2.0: Online HD Map Inference Using a Prior SD Map

MapLite 2.0:使用先前SD地图的在线高清地图推断MapLite 2.0: Online HD Map Inference Using a Prior SD Map MapLite 2.0:使用先前SD地图的在线高清地图推断 Abstract 部署全自动驾驶汽车一直是工业界和学术界深入研究的主题。然而,这些努力中的大部分都严重依赖于高清 (HD…

Parallels 升级后提示虚拟机网络初始化失败

之前一直没升级,奈何升级 macOS 后,parallels 打不开了,只能尝试去升级,但升级之后的系统打开总是提示网络初始化失败,如下图所示。解决如下方式已解决,注意,尝试之前,先把自己的 parallels 软件给关了。 1、打开资源库的 parallels 打开【访达】,点击顶部【前往】,点…

Centos7中升级python3.10.4版本

****** 先上结果图 ****** (之前是 2.7.5 版本,日志太长没法找到之前的版本截图了) ****** 先上结果图 ******1、下载安装一些依赖包yum install -y wget lrzsz net-tools zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc ma…

Java中时间戳的使用

原文链接 当前时间 import java.sql.Timestamp; //导包Timestamp nowTime = new Timestamp(System.currentTimeMillis()); System.out.println(nowTime);输出: 2022-06-08 11:15:51.014Long型时间戳 Long timeLong = System.currentTimeMillis(); System.out.println("ti…

用栈结构解决佩慈糖果盒问题(JavaScript)

封装的栈操作方法: https://www.cnblogs.com/LIXI-/p/16612874.htmlvar sweetBox = new Stack();sweetBox.push(red);sweetBox.push(yellow);sweetBox.push(red);sweetBox.push(yellow);sweetBox.push(white);sweetBox.push(yellow);sweetBox.push(white);sweetBox.push(yello…

HCIA学习笔记二十:STP生成树

一、环路的影响 1)环路产生• 交换机之间通过多条链路互连时,虽然能够提升网络可靠性,但是同时也带来环路问题。 2)广播风暴二、STP的作用 1)阻塞端口• STP通过阻塞端口来消除环路,并能实现链路备份的作用。 2)阻塞某端口后3)链路备份三、STP生成树基本计算过程 1)选…

taro小程序日期选择器

taro-swiper-weektaro-swiper-week 是一个基于 taro 的日期选择器控件。 可以用在h5、微信小程序等众多平台!简体中文 | English🔨 使用 先安装 npm install taro-swiper-week再引入页面 import SwiperWeek from "taro-swiper-week"; import "taro-swiper-we…

Docker 拉取Nginx镜像 和运行

Docker 镜像拉取docker pull [OPTIONS] NAME[:TAG|@DIGEST] 镜像拉取命令OPTIONS说明:-a :拉取所有 tagged 镜像--disable-content-trust :忽略镜像的校验,默认开启docker images 查询所有镜像docker run [OPTIONS] IMAGE [COMMAND] [ARG…] 运行镜像 docker run --help 可查看…

Java-基础语法

day02 - Java基础语法 1. 运算符 1.1 算术运算符(理解) 1.1.1 运算符和表达式 运算符:对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。 ​ 不同运算符连接的表达式体现的是不同类型的表达式。…

Java集合-List

1.Collection集合 1.1集合体系结构【记忆】集合类的特点 ​ 提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变集合类的体系图1.2Collection集合概述和基本使用【应用】Collection集合概述是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素…

Java异常处理

3.异常 3.1异常(记忆)异常的概述 ​ 异常就是程序出现了不正常的情况异常的体系结构3.2JVM默认处理异常的方式(理解)如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:把异常的名称,错误原因及异常出现的位置等信息输出在了控制…

JavaIO流---字节流和字符流

1.字节缓冲流 1.1字节缓冲流构造方法【应用】字节缓冲流介绍lBufferOutputStream:该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用lBufferedInputStream:创建BufferedInputStream将创建一个内部缓冲…