链接:
https://www.nowcoder.net/acm/contest/78/E
来源:牛客网
来源:牛客网
题目描述
已知有一个n+1个数的数列,对于给定的A
0和A
n ,当i满足当1<=i<=n-1时有
现在小星想知道对于这个数列一段区间的和。
输入描述:
第一行输入四个数 n,A0,An,Q
接下来Q行 每行输入两个数l,r
0=< n,A
0,An<=1e9,Q<=100000
0<=l<=r<=n
输出描述:
对于每组查询输出Al到Ar的和
输入
3 0 3 2 1 1 1 3
输出
1 6
题意:很明显了。
思路:把左边的C[n,i]除到右边去,用最基本的组合公式变形就可以得到:Ai=(An-A0)/2*i,一开始错看成等比了,后来发现第0项处理不了,再变形才发现就是个简单的等差通项:Ai=A0+(An-A0)/2*i。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,x,y,q,l,r,ans;
int main()
{
while(~scanf("%lld%lld%lld%lld",&n,&x,&y,&q))
{
ll k=(y-x)/n;
while(q--)
{
scanf("%lld%lld",&l,&r);
ll al=x+k*l,ar=x+k*r;
printf("%lld\n",((al+ar)*(r-l+1))/2);
}
}
return 0;
}