题解 P4863 【JerryC Loves Driving】
Insouciant21 · · 题解
首先一想直接暴力 A=1 B=2000000 就T了
于是列表找规律
发现在
可以发现,对于
于是将外部循环
求式子
即为求表中
对于每一列的值,可以使用等差数列求和公式计算
设
计算
等差数列之和为
先计算
在
式子为
对于超出
得到式子
AC代码如下
#include <bits/stdc++.h>
using namespace std;
int A, B;
long long ans;
int main() {
cin >> A >> B;
for (int j = 1; j <= B; j++) {
long long sum = 0;
long long l = A / j;
long long r = B / j;
sum = r * (r + 1) * j / 2;
long long front = l * (l + 1) / 2 * j - l * ((l + 1) * j - A);
long long back = ((r + 1) * j - B - 1) * r;
sum = sum - front - back;
if (j % 2 == 0)
ans += sum;
else
ans -= sum;
}
cout << ans << endl;
return 0;
}