题目描述
在了解了数值积分的基本原理后,小 P 打算用如下方法估算二次函数在 [l,r] 区间的积分:
-
给定二次函数 f(x)=x2+bx+c,其中两个系数 b 和 c 均为整数;
-
对于给定区间 [l,r](l 和 r 均为整数),选取闭区间内所有偶数坐标点:l≤x, x+2, x+4, ⋯≤rl
-
分别计算每个坐标点的函数值并求和,再乘以坐标点间距 22,即计算:s=2×(f(x)+f(x+2)+f(x+4)+⋯)
s 即为小 P 估算的积分结果。
试帮助小 P 编程实现上述计算过程:对于任意给定的系数 b、c 和区间 l、r,计算并输出 s。
输入格式
从标准输入读入数据。
输入仅一行,包含四个整数 b、c、l、r,含义如前文所述。
输出格式
输出到标准输出。
输出一个整数 s,表示小 P 估算的积分结果。
样例1输入
1 2 0 5
样例1输出
64
样例2输入
-20 -20 1 1000
样例2输出
324294000
子任务
全部测试数据保证 0≤l<l+2≤r≤1000且 −20≤b,c≤20−20≤0b。
题解
读取数据后,可直接按照题目要求进行计算。需要注意的是,选取偶数坐标点可以通过循环直接实现,使用表达式i + i % 2
:当i为偶数时,数值保持不变;当i为奇数时,数值会自动调整为相邻的偶数。
代码
#include<bits/stdc++.h>
using namespace std;
int b,c,l,r;
long long res;
int main(){
cin>>b>>c>>l>>r;
for(int i=l+l%2;i<=r;i+=2){
res+=i*i+b*i+c;
}
cout<<res*2;
}