CCF-CSP第37次认证第一题——数值积分(满分题解)

题目描述

在了解了数值积分的基本原理后,小 P 打算用如下方法估算二次函数在 [l,r] 区间的积分:

  1. 给定二次函数 f(x)=x2+bx+c,其中两个系数 b 和 c 均为整数;

  2. 对于给定区间 [l,r](l 和 r 均为整数),选取闭区间内所有偶数坐标点:l≤x, x+2, x+4, ⋯≤rl

  3. 分别计算每个坐标点的函数值并求和,再乘以坐标点间距 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值