[数论分块/取整转换]2021浙江省赛 F

题目链接

给定两个数 n , m < = 1 0 8 n,m<=10^8 n,m<=108 ,请选择两个数 x , y x,y x,y ,使得 m + y m+y m+y n − x n-x nx 的倍数且 x + y x+y x+y 最小。

输出 x + y x+y x+y 的最小值。

前置知识:数论分块

假设要计算 ∑ x = 1 n ⌊ n / x ⌋ \sum_{x=1}^{n}\lfloor n/x \rfloor x=1nn/x ,将x的取值范围分为很多个块,每个块内答案相等,若某个块的答案为 k k k,则该块的右端点为 ⌊ n / k ⌋ \lfloor n/k \rfloor n/k

于是在 O ( n ) O(\sqrt n) O(n )的复杂度内即可计算完成。

分析:

假设已经定下了 x x x ,设 t = n − x t=n-x t=nx ,我们可以直接确定 y y y 的大小。

y = ⌈ m / t ⌉ ∗ t − m y=\lceil m/t \rceil *t-m y=m/ttm

x + y = ( ⌈ m / t ⌉ − 1 ) ∗ t + n − m x+y=(\lceil m/t \rceil-1) *t+n-m x+y=(m/t1)t+nm

向上取整可以通过一个公式转化为向下取整

⌈ x / y ⌉ = ⌊ ( x − 1 ) / y ⌋ + 1 \lceil x/y \rceil =\lfloor (x-1)/y \rfloor +1 x/y=(x1)/y+1

于是 x + y = ( ⌊ ( m − 1 ) / t ⌋ ) ∗ t + n − m x+y=(\lfloor (m-1)/t \rfloor) *t+n-m x+y=((m1)/t)t+nm

此时可以使用数论分块解决该问题,取每个块的左端点即可。

### 关于2021浙江省ACM竞赛的信息 目前并未提供关于2021浙江省ACM竞赛的具体解题报告或成绩相关内容的引用材料。然而,可以从以往的比经验和总结中推测可能涉及的内容。 #### 比概述 通常情况下,浙江省ACM竞赛会吸引来自全省各大高校的学生参与,参队伍数量一般在200至300支之间[^1]。每支队伍由三名队员组成,共同解决一系列编程问题。比时间通常为五小时,题目难度覆盖基础算法到复杂数据结构的应用。 #### 题目特点 根据过往的经验,浙江省ACM竞赛的题目设计注重考察选手的基础算法能力以及团队协作效率。例如,在某些年的比中,可能会出现多组测试样例的情况,输入的第一行为测试用例的数量 \(T\),随后跟随 \(T\) 组具体的数据[^3]。这种类型的题目要求选手具备较强的边界条件处理能力和高效的调试技巧。 #### 常见问题与应对策略 从往届比的学习体会来看,许多队伍容易因细节失误而失分。比如,由于编译器兼容性问题导致提交失败,或是因为粗心大意写错运算符而导致多次罚时[^2]。因此,建议参者提前熟悉比环境中的编译工具,并制定合理的分工合作机制以提高正确率。 以下是基于Python实现的一个简单例子来展示如何读取并处理多个测试案例: ```python # 多组测试用例的标准模板 t = int(input()) # 输入测试用例数 for _ in range(t): n = int(input()) # 对应每个测试用例的第一个整数n data = list(map(int, input().split()))[:n] # 接下来的n个整数作为一组数据 result = sum(data) # 这里假设我们需要计算这组数据之和 print(result) ``` 尽管上述代码仅为示意用途,但它体现了实际比中常见的输入输出模式之一。 #### 总结 虽然未直接提及2021年度事详情,但从其他几年份资料可推知,成功的关键在于扎实的技术功底加上细致入微的操作习惯。希望以上信息能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值