题解
2026-08-14 10:28:56
发布于:广西
2阅读
0回复
0点赞
暴力枚举会超时(TLE)
用 for 循环从 l 枚举到 r,当 r 达到 10^18 时,循环次数是 10^18 级别,1 秒绝对跑不完。需要用 O(1) 数学公式 解决。
正确解法
利用容斥原理,1 到 n 之间的闰年数量为:
count(n) = n/4 − n/100 + n/400
区间 [l, r] 的答案就是 count(r) − count(l−1)
代码:
#include<bits/stdc++.h>
using namespace std;
long long count_leap(long long n) {
return n / 4 - n / 100 + n / 400;
}
int main() {
long long l, r;
cin >> l >> r;
cout << count_leap(r) - count_leap(l - 1);
return 0;
}
这里空空如也






有帮助,赞一个