专栏文章
CF1485C Floor and Mod
CF1485C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miovuc1t
- 此快照首次捕获于
- 2025/12/03 01:59 3 个月前
- 此快照最后确认于
- 2025/12/03 01:59 3 个月前
题意简述
对于所有 求 的数对 的个数。
题目分析
评蓝高了,CF 上都只有 1700。
使用瞪眼法容易发现以下几个性质:
- ;
- ;
- 对于任意合法的 取值,满足条件的 最多只有 个(除 以外, 的余数只有 个)。
根据以上性质容易发现,能把一个 的所有数对都取完的条件是 ,即 。
对于剩下的 ,此时 ,它们对答案的贡献即为 整除它们的商。
考虑枚举这个商。由于是整除,所以自然想到整除分块。
具体地,对于枚举的 ,商均为 的数即为 中的数(根据 调整上界),贡献显然。
时间复杂度 。
代码
CPPCI N = 2e5 + 5;
int T, x, y, ans;
signed main() {
T = read();
while(T --) {
x = read(), y = std::min(x, read()), ans = 0;
rep(i, 2, std::min(y, (int)std::sqrt(x))) ans += i - 1;
dep(i, x / (int)std::sqrt(x) - 1, 1) if(x / i ^ x / (i + 1)) {
if(x / (i + 1) >= y) break;
ans += i * (std::min(y, x / i) - x / (i + 1)) - (y >= x / i);
}
printl(ans);
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...