前言
T
a
g
:
Tag :
Tag:数学 思维 规律 前缀和
传送门 :
题意 :
给你一个数组,你需要求出 所有子段平均数之和
答案对 1 0 9 + 7 10^9+7 109+7取模,如果答案最简是 a b \frac{a}{b} ba,那么需要找到最小的非负整数 x x x使得 x × b ≡ a ( 1 0 9 + 7 ) x×b\equiv a(10^9+7) x×b≡a(109+7)
思路 :
我们考虑对操作的区间进行 长度分类,即
t
=
1
,
2....
n
t=1,2....n
t=1,2....n
t
=
1
t=1
t=1
显然答案就是
S
n
S_n
Sn(表示前缀和)
t
=
2
t=2
t=2
答案是
S
n
+
S
n
−
1
−
S
1
S_n+S_{n-1}-S_{1}
Sn+Sn−1−S1
…其余同理
因此我们可以 O ( n ) O(n) O(n) 的求出每一段的值
最后统计答案的时候,我们对每一段进行求一个 乘法逆元即可,即分母
code :
ll qmi(ll a,ll b){
ll res = 1;
while(b){
if(b&1) res = res*a%mod;
a = a*a%mod;
b>>=1;
}
return res;
}
ll n,a[N],pre[N],dp[N];
void solve(){
cin>>n;
for(int i=1;i>pre[i];
pre[i] = (pre[i] + pre[i-1])%mod;
}
for(int i=1;i
关注
打赏
