被去年的zyb打爆了,诶诶

news/2025/2/25 10:22:19/文章来源:https://www.cnblogs.com/zyb-txdy/p/18735621

与季风大战 1.5h,结果快读写挂了第一发提交爆零,怎么会是呢/ll。

为方便描述和代码实现,下文默认 \(x_i\)\(1\)\(n\) 编号,而不是从 \(0\)\(n - 1\) 编号。

题目要我们求满足条件的 \(m\) 的最小值,不妨看看它给我们的式子可以推出什么约束。

首先我们发现前两个式子把未知的 \(x_i'\)\(y_i'\) 和已知的 \(x_i\)\(y_i\) 混到一起了。这对于想要推出 \(x_i'\)\(y_i'\) 的约束的我们来说很不好。于是显然可以考虑移项,得到:

  • \(\sum\limits_{i = 1}^{m} x_i' = x - \sum\limits_{i = 1}^{m} x_{i \bmod n}\)

  • \(\sum\limits_{i = 1}^{m} y_i' = y - \sum\limits_{i = 1}^{m} y_{i \bmod n}\)

考虑第三个式子,它直接对 \(x_i'\)\(y_i'\) 进行了约束。但是我们显然不能直接构造出 \(x_i'\)\(y_i\) 并判断它们是否符合约束,于是考虑把第三个式子和前两个式子联系起来,也就是把它化成 \(\sum\limits_{i = 1}^{m} x_i'\)\(\sum\limits_{i = 1}^{m} y_i'\) 的形式。

直观感受一下,容易发现,设我们通过前两个式子得到了 \(\sum x_i'\)\(\sum y_i'\) 的取值范围,那么为了使它们也满足第三个式子,我们肯定是会把 \(x_i'\) 变得尽量平均且两两同号,对于 \(y_i'\) 同理。

因此,容易得到,第三个式子无法被满足,当且仅当 \(\sum\limits_{i = 1}^{m} x_i' + \sum\limits_{i = 1}^{m} y_i' > mk\)。充分性显然,必要性只需要考虑将 \(i\) 较小的时候的 \(x_i' + y_i'\) 设定为 \(k\) 即可。

但是这时,前两个式子的右半部分也是可变的。这个的解决方式比较容易,考虑枚举 \(m \bmod n\) 的值并每次 \(O(1) / O(\log)\) 地处理即可。也就是说,设 \(w = m \bmod n\),则 \(w\) 确定时,我们可以把这三个式子整理为一个约束:

\[|(x - t \sum\limits_{i = 1}^{w} x_i) - t \times \sum\limits_{i = 1}^{n} x_i| + |(y - t \sum\limits_{i = 1}^{w} y_i) - t \times \sum\limits_{i = 1}^{n} y_i| \le n t k + w k \]

这个式子中只有 \(t\) 是不确定的,它代表 \(\left\lfloor \frac{m}{n} \right\rfloor\)

这个式子的左边有两个绝对值,根据初中数学,我们可以直接把它拆成四个式子,并求符合范围的值即可。

该做法的时间、空间复杂度均为 \(O(n)\),实测不卡常、不使用 __int128、不使用快读而使用 cin / cout 并使用 endl 也能过。代码很短,只有不到 \(1.5 \text{kb}\)

#include <bits/stdc++.h>
using namespace std;
#define int long longconst int N = 1e5 + 5, INF = 1e18;int T, n, k, x, y, min_val, max_val;
int a[N], b[N], pre1[N], pre2[N];int Div1(int p, int q) {if (p % q == 0 || (p > 0 && q < 0) || (p < 0 && q > 0)) return p / q;else return p / q + 1;
}int Div2(int p, int q) {if (p % q == 0 || (p > 0 && q > 0) || (p < 0 && q < 0)) return p / q;else return p / q - 1;
}void get(int xcur, int p, int ycur, int q, int sum, int val) {int tmp1 = sum - p - q, tmp2 = xcur + ycur - val;if (tmp1 > 0 && min_val <= INF) min_val = max(min_val, Div1(tmp2, tmp1));else if (tmp1 < 0) max_val = min(max_val, Div2(tmp2, tmp1));else if (tmp2 > 0) min_val = INF + 1;else return;
}void Solve() {int ans = INF + 1;cin >> n >> k >> x >> y;for (int i = 1; i <= n; ++i) cin >> a[i] >> b[i];for (int i = 1; i <= n; ++i) pre1[i] = pre1[i - 1] + a[i], pre2[i] = pre2[i - 1] + b[i];for (int i = 0; i <= n; ++i) {max_val = INF; min_val = 0;get(x - pre1[i], -pre1[n], y - pre2[i], -pre2[n], n * k, i * k);get(x - pre1[i], -pre1[n], pre2[i] - y, pre2[n], n * k, i * k);get(pre1[i] - x, pre1[n], y - pre2[i], -pre2[n], n * k, i * k);get(pre1[i] - x, pre1[n], pre2[i] - y, pre2[n], n * k, i * k);if (max_val >= min_val) ans = min(ans, min_val * n + i);}if (ans == INF + 1) ans = -1;cout << ans << endl;
}signed main() {cin >> T;while (T--) Solve();return 0;
}

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

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

相关文章

扩展推荐篇 - 让你的浏览器更漂亮!

作为一个颜控,首先推荐的就是能美化浏览器的扩展 🙃。作为一个颜控,首先推荐的就是能美化浏览器的扩展 🙃。 ‍ 自定义主题 Chrome 自带不少对外观的设置: ​ ‍ 但这些其实挺单调的,能调整的样式很少。 我们可以打开应用商店,打开主题专栏,能看到不少好看的主题: ​…

AI 赋能指标管理分析,开启企业数智领航时代

以下为本次分享的回顾: 在大数据时代,企业数字化转型的核心目标在于让数据发挥真正的价值。从数据报表到分析平台,再到日常取数,企业所依赖的不仅仅是数据本身,而是通过数据所呈现出对业务的分析、业务的查看以及业务未来趋势的洞察。再多数据只有同业务相结合转化为信息,…

传统企业可观测建设之路

本文来自腾讯蓝鲸智云社区用户: CanWay数字化转型与可观测的关系 在数字化转型的浪潮中,我们面临着将“线下业务线上化”及实现“业务快速创新迭代”的迫切需求,这也进而要求支撑业务的应用系统更加敏捷、可扩展性更高。 因而,分布式、云原生是企业应用架构的发展方向。分布…

从混乱到有序:板栗看板如何成为物流管理的得力助手

利用板栗看板优化物流管理,可以通过其可视化的任务管理、团队协作和实时跟踪功能,提升物流效率、减少错误并增强团队协作。以下是具体的优化方法和步骤:明确物流管理流程 在开始使用板栗看板之前,先梳理企业的物流管理流程,明确各个环节(如订单接收、库存管理、运输调度、…

鲜血

S1毕业装--属性 急速>全能>精通>爆击 急速,全能和精通的收益非常接近。爆击随缘 --团本天赋--团本天赋代码 CoPAtbMOTHlnKIwUyAn+DK70SjhBzYMjZGjlZMzMTzMGmZMjBAAAAAzMzMzMzMzmZmxAAAgZmZmBAAAYgBmxoxyGIbDYDgZwG --大秘天赋--大秘天赋代码 CoPAtbMOTHlnKIwUyAn+DK7…

软件测试工作全解析——流程、方法与避坑指南

引言 软件测试是保障产品质量的核心环节,但许多团队仍深陷认知误区和低效流程。本文以工程化视角拆解测试全流程,结合实用工具与经典案例,助你构建系统化测试思维。一、软件测试全流程标准化(5W2H模型) 1. 测试计划方案(Why & How)战略定位:明确测试在项目生命周期…

红色五角星1

from turtle import * fillcolor("red") begin_fill() while True: forward(200) right(144) if abs(pos())<1: break end_fill()

解锁 Hertz 路由:构建高效 API 的魔法钥匙

路由注册 Hertz 提供了 GET、POST、PUT、DELETE、ANY 等方法用于注册路由。方法 介绍Hertz.GET 用于注册 HTTP Method 为 GET 的方法Hertz.POST 用于注册 HTTP Method 为 POST 的方法Hertz.DELETE 用于注册 HTTP Method 为 DELETE 的方法Hertz.PUT 用于注册 HTTP Method 为 PUT…

No.1 VS code

1、认识 VS code 2、快速创建一个.html 文件 1)新建文件:test.html 2)英文状态下输入一个“!”,回车; 3)在body中输入“我的第一个网页”; 4)运行:从文件夹中找到创建的这个文件,双击打开(以后讲其他运行方式) 3、VSCode 快捷键 1)! + 回车:快速创建一个html…

太阳花

import turtle from turtle import * color(red , yellow) begin_fill() while True: forward(200) right(170) if abs( pos() ) < 1: break end_fill() done() turtle.fd(100)

前端主流构建工具

本文首发博客网站,由于图片和格式解析问题,可前往阅读原文随着前端开发复杂度的提升,构建工具在开发流程中扮演着越来越重要的角色。这些工具可以帮助开发者实现代码的打包、优化、转译、模块化处理等功能,从而提升开发效率和用户体验。本文将以当前主流的前端构建工具为核…