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

P16353 「Diligent-OI R3 A」说好不哭 题解

P16353 「Diligent-OI R3 A」说好不哭

Link: https://www.luogu.com.cn/problem/P16353

题目描述

小 C 想知道,是否存在一个长度为n nn的整数序列满足最大非空子段和为x xx,最小非空子段和为y yy

若存在,输出YES,否则输出NO

请注意,若序列b bb可以通过将序列a aa分别在前面和后面删除若干个元素(可以为 0 个)得到,则定义b bba aa的子段。

输入格式

本题有多组测试数据。

输入的第一行包含一个整数T TT,表示测试数据的组数。

接下来包含T TT组数据,对于每组数据,输入一行包含三个整数n , x , y n,x,yn,x,y

输出格式

对于每组数据输出一行YESNO,表示是否存在满足条件的序列。

输入输出样例 #1

输入 #1

7 5 5 0 2 3 1 2 5 3 1 5 -1 3 -1 -2 3 -1 -3 4 3 -4

输出 #1

YES YES NO NO NO YES YES

说明/提示

【样例解释】

第一组数据可构造出:{ 1 , 2 , 1 , 1 , 0 } \{1,2,1,1,0\}{1,2,1,1,0}

第二组数据可构造出:{ 2 , 1 } \{2,1\}{2,1}

可以证明,第三、四、五组数据无法构造出满足题意的序列。

第六组数据可构造出:{ − 1 , − 1 , − 1 } \{-1,-1,-1\}{1,1,1}

第七组数据可构造出:{ 1 , 2 , − 2 , − 2 } \{1,2,-2,-2\}{1,2,2,2}

【数据范围】

测试点编号分值T ≤ T \leTn ≤ n \len∣ x ∣ ≤ \vert x\vert \lex∣ y ∣ ≤ \vert y\vert \ley特殊性质
1 1110 101010 5 10^51051 1110 9 10^910910 9 10^9109
2 2220 202010 10105 555 555 55
3 3320 202010 5 10^51052 2210 9 10^910910 9 10^9109
4 4420 2020^10 9 10^9109^^
5 5530 3030^^^^
  • 特殊性质:x , y x,yx,y均为非负整数。

对于所有数据,保证1 ≤ T ≤ 10 5 1 \le T \le 10^51T1051 ≤ n ≤ 10 9 1\le n\le 10^91n109− 10 9 ≤ y ≤ x ≤ 10 9 -10^{9}\le y \le x\le 10^{9}109yx109


Solution

1. 题意

输入三个数n , x , y n,x,yn,x,y,判断是否存在一个长度为n nn的整数序列满足最大非空子段和为x xx,最小非空子段和为y yy

2. 分析

比较入门的构造类题目。

n nn的大小以及x , y x, yx,y的符号进行分类。

(1)当n = 1 n = 1n=1

序列只有一个元素a 1 a_1a1。此时最大非空子段和与最小非空子段和都等于a 1 a_1a1

此时充要条件直接就是x = y x=yx=y

(2)当n ≥ 2 n \ge 2n2

要判断是否存在这样的子段,根据x , y x, yx,y的符号分为三种情况。

x ≥ 0 x \ge 0x0y ≤ 0 y \le 0y0

此时令序列为{ x , y , 0 , 0 , … , 0 } \{x, y, 0, 0, \dots, 0\}{x,y,0,0,,0}。如此一来由于y ≤ 0 ≤ x y \le 0 \le xy0x,任意子段和必然落在[ y , x ] [y, x][y,x]区间内。包含x xx的子段最大值为x xx,包含y yy的子段最小值为y yy。中间的0 00不会改变最值。

x ≥ y ≥ 0 x \ge y\ge 0xy0

此时所有子段和均为正,说明序列中不能有非正数(否则会出现≤ 0 \le 00的子段和,与最小值为正矛盾)。对于全正序列:

  • 最大子段和一定是整个序列的总和(加正数只会变大)。
  • 最小子段和一定是最小的单个元素(任意更长子段和都大于其中任一元素)。
  • 因此必须满足:总和为x xx,且每个元素≥ y \ge yy。即x ≥ n ⋅ y x \ge n \cdot yxny

此时的充要条件是x ≥ n y x\ge nyxny。构造方法是a 1 = x − ( n − 1 ) y a_1 = x - (n-1)ya1=x(n1)y,其余a i = y a_i = yai=y。由条件知a 1 ≥ y a_1 \ge ya1y,所有元素为正,满足题意。

x < 0 x < 0x<0(此时必有y ≤ x < 0 y \le x < 0yx<0,全负情况):

此时所有子段和均为负,说明序列中不能有非负数
对于全负序列,最小子段和一定是整个序列的总和(加负数只会变小),最大子段和一定是最大的单个元素(即绝对值最小的负数)。

因此必须满足:总和为y yy,且每个元素≤ x \le xx。即y ≤ n ⋅ x y \le n \cdot xynx

此时的充要条件是y ≤ n x y\le nxynx。构造方法是a 1 = y − ( n − 1 ) x a_1 = y - (n-1)xa1=y(n1)x,其余a i = x a_i = xai=x。由条件知a 1 ≤ x a_1 \le xa1x,所有元素为负,满足题意。

汇总以上结果,我们直接上伪代码。

伪代码

对每组数据( n , x , y ) (n, x, y)(n,x,y)

  1. n == 1
    • 判断是不是x == y
  2. n >= 2
    • x >= 0 and y <= 0
      • 直接输出YES
    • x >= 0 and y > 0
      • 判断x >= n * y
    • x < 0
      • 判断y <= n * x

最后单组数据直接就是O ( 1 ) O(1)O(1)的常数复杂度了。

3. 代码

C#

usingSystem;classP16353{staticvoidSolve(){stringline=Console.ReadLine();intT=Convert.ToInt32(line);while(T-->0){string[]inputs=Console.ReadLine().Split();longn=long.Parse(inputs[0]);longx=long.Parse(inputs[1]);longy=long.Parse(inputs[2]);boolok=false;if(n==1){ok=(x==y);}else{if(x>=0&&y<=0){ok=true;}elseif(x>=0&&y>0){ok=(x>=n*y);}else{ok=(y<=n*x);}}Console.WriteLine(ok?"YES":"NO");}}staticvoidMain(){Solve();}}

C++

#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;voidsolve(){intT;if(!(cin>>T))return;while(T--){ll n,x,y;cin>>n>>x>>y;boolok=false;if(n==1){ok=(x==y);}else{if(x>=0&&y<=0){ok=true;}elseif(x>=0&&y>0){ok=(x>=n*y);}else{ok=(y<=n*x);}}cout<<(ok?"YES\n":"NO\n");}}intmain(){solve();return0;}
http://www.rkmt.cn/news/1463602.html

相关文章:

  • 从Push到Pull:搞懂Prometheus监控数据流的两种姿势,附Shell/Python推送实战
  • 2026云浮市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 087、零售货架商品检测:密集排列、遮挡严重、类别极多的 SKU 检测方案
  • Codex中文网 | Codex CLI 中文指南
  • 一件卫衣的诞生:从纱线到成衣的全流程解析
  • 深度解析BestBlogs开源项目:基于GitHub Actions自动化构建个人技术博客与内容聚合平台的实战指南
  • 别再踩坑了!用VMProtect SDK 3.4为你的软件实现一机一码+时间锁(附完整注册机源码)
  • Logisim-evolution数字电路设计:从零开始到FPGA实现的完整指南
  • 2026年新消息:洞察国内扭王字块钢模市场格局与核心服务商推荐 - 2026年企业资讯
  • 微信小程序二维码生成终极指南:weapp-qrcode高效解决方案
  • Transformers 3.x 用户注意:本地加载bert-base-chinese模型,这几个版本兼容性坑别踩
  • 智能对账系统选型避坑清单(2024最新实测数据版):87%企业踩中的AI集成断点全曝光
  • 测绘日常:ArcGIS 字段计算器实现固定前缀 + 10 位补零 BSM 自动编号
  • 3分钟免费安装AI象棋教练:Vin象棋让棋艺提升变得简单快速
  • 【国家级信创认证】:首套通过上交所智能审核适配测试的AI上市辅助平台,内测资格最后47席
  • 别再乱设max-http-header-size了!SpringBoot内嵌Tomcat的这几个Connector参数详解与避坑指南
  • 星穹铁道自动化助手:三月七小助手完整使用指南
  • 2026年企业破产重整律师事务所服务解析:炜衡密云分所核心优势解读 - 商业科技观察
  • Labview视觉开发环境搭建保姆级教程(含VDM/VAS安装避坑指南)
  • 告别JSON对比的烦恼:这个可视化工具如何帮你节省90%调试时间
  • 让音乐看得见:用Lano Visualizer打造动态桌面音频可视化体验
  • 实战集成:利用快马ai实现cad安装与项目管理系统的自动化对接
  • 【状态估计】电力系统状态估计中的异常检测与分类附Matlab代码
  • 2026年当下江苏省纳米釉面漆实力厂家怎么选?深度解析技术壁垒与市场适配逻辑 - 2026年企业资讯
  • Eledoisin-Related Peptide;KFIGLM
  • Forza Mods AIO:终极免费修改工具,彻底释放《极限竞速》游戏潜能 [特殊字符]
  • 2026年河北专业的阻氧PB管厂商:采暖系统安全与效率的守护者 - 2026年企业资讯
  • 从DHT11到DHT12:51单片机温湿度监测项目,我踩过的那些坑和最佳实践
  • Node.js与Express框架:快速构建后端应用
  • Kimi k2.6 LeetCode 3003. 执行操作后的最大分割数量 Java实现