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

CF2086B 学习笔记

题意

对于每个测试用例:
给定一个长度为 \(n\) 的数组 \(a_n\)\(k\),按照如下要求构造长度为 \(nk\) 的数组 \(b_{nk}\)

  • \(\forall 1 \le i \le n, b_i=a_i\)
  • \(\forall {n + 1} \le i \le nk, b_i=b_{i-n}\)

再给定一个 \(x\),统计所有的左端点 \(l\),满足

\[\exists r \ge l,\sum_{i=l}^{r}b_i \ge x \]


先说说 \(b\) 数组的构造,首先题目中的例子:

\[a=\{2,3,1,4\},k=3 \]

构造出的 \(b\) 数组为

\[b=\{2,3,1,4,2,3,1,4,2,3,1,4\} \]

其实就是 \(a\) 数组反复 \(k\) 遍,将上面的情况一般化就可以证明。

\(a\) 数组为 \(a_1, a_2, \dots, a_n\),则 \(b\) 数组的前 \(n\) 个为 \(a_1, a_2, \dots, a_n\),再根据构造的第二条,

\[\begin{cases} b_{n+1}=b_{n+1-n}=b_1=a_1\\ b_{n+2}=b_{n+2-n}=b_2=a_2\\ \dots\\ b_{nk}=b_{nk-n}=b_{n(k-1)}=a_n \end{cases} \]

证毕。


接下来就是左端点 \(l\) 的寻找了。

考虑先计算前缀和和总和。

\[sum=\sum_{i=1}^{n}a_i \]

寻找周期即可,更详细的解释在代码里。

code

#include <iostream>
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define maxn 100005
#define int long long
using namespace std;int t, n, k, x;int a[maxn], pre[maxn];signed main() {cin >> t;while (t--){cin >> n >> k >> x;for (int i = 0; i < n; i++) cin >> a[i];for (int i = 0; i < n; i++)pre[i + 1] = pre[i] + a[i];//前缀和int total = pre[n];int ans = 0;// 对于每个起始位置在a中的索引i (0-based)for (int i = 0; i < n; i++) {/*对于每个周期p (0-based)起始位置: l = i + p*n + 1我们需要找到最小的完整周期数c,使得:从位置i开始,加上c个完整周期的总和 >= x先从当前位置到当前周期结束*/int cur_sum = pre[n] - pre[i];if (cur_sum >= x) {// 不需要跨周期ans += k;  // 在这个位置的所有周期都满足条件continue;}// 需要跨周期int need = x - cur_sum;if (total <= 0) // 如果total <= 0,无法通过增加周期来满足continue;// 需要的完整周期数int need_cycles = (need + total - 1) / total;// 如果需要的周期数 <= 剩余的周期数if (need_cycles <= k - 1) // 在这个位置的所有周期中,满足条件的周期数ans += (k - need_cycles);}cout << ans << "\n";}return 0;
}
http://www.jsqmd.com/news/334211/

相关文章:

  • springboot学分管理系统-开题报告
  • 数据增量推送技术方案文档
  • 【VMware】VMware 安装kali 相关问题
  • <span class=“js_title_inner“>Orval 中存在严重的代码注入漏洞,存在供应链安全风险</span>
  • 【开发工具】Windows 11 安装 Miniforge,配置国内源
  • RocketMQ Hook 实现
  • 2026春节送健康才是真心意!精选8大高端滋补礼盒品牌推荐,看这篇就够 - 资讯焦点
  • 【VMware】VMware安装Ubuntu虚拟机教程,图文详细
  • AI玩具市场2026全景报告:351 亿赛道爆发,三大人群需求定义未来
  • 出题记录
  • 智能体来了(西南总部):Agent失序下的AI Agent指挥官与AI调度官
  • [todo]try catch no | result yes
  • <span class=“js_title_inner“>城市发展中心:2026年英国城市经济展望</span>
  • 黄金暴跌启示录:是牛回头还是拐点将至?
  • 阿里云携手模思智能构建一站式多模态数据处理平台
  • 票号
  • 智能装备工厂研发部门10个SolidWorks画图人员如何共享一套服务器的资源和算力
  • 网安毕设新颖的课题建议
  • 人才库与招聘绩效联动:3 步搞定招聘渠道效果精准分析
  • YOLO26原创自研 | 自研独家创新BSAM注意力 ,基于CBAM升级
  • 相场法模拟水力压裂 一共6个案例,附带参考文献 COMSOL 相场法与水力压裂 案例一:单一裂...
  • 墓碑密码 FWT 复习
  • STL 大学习
  • 从 0 到 1 搭建战略性人才库:长期人才储备的关键路径
  • 上市公司“并购”毫米波雷达标的,未来四年营收12亿元对赌
  • 2026 贵阳养老优选指南 贵阳市云岩区康祥养老院 —— 让银龄生活有尊严更有温度 - 深度智识库
  • AVIF 转 JPG 的真实需求:不是格式落后,而是兼容更重要
  • 哪个执业医师培训机构性价比高?这家最值得推荐 - 医考机构品牌测评专家
  • Windows 11、10 电脑关机故障的原因找到了,微软已经开始准备修复补丁
  • YOLO26优化:Transformer创新 | 卷积化自注意力,共享大卷积核和动态卷积核,引入Flash Attention高效涨点| ICCV2025