题解:P11617 递推
Elysian_Realm · · 题解
一开始并没有什么思路,于是考虑依次写出
发现存在规律,故最后写项数趋近正无穷时的递推式收尾:
其中
将以上式子合并,可得:
由于
为便于理解,下文用
不妨记
则原式化简为
式子中
最后答案即为
PS:记得计算乘积时及时取模。
参考代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll MOD = 998244353;
ll n;
ll a[5005],b[5005];
ll qpow (ll x,ll y){ // 快速幂
ll res = 1,xx = x;
while (y){
if (y&1) res = res * xx % MOD;
y /= 2,xx = xx * xx % MOD;
}
return res;
}
ll qb[5005],qa[5005];// 用于记录a,b数组的前缀和
int main (){
cin >> n;
for (int i = 1;i <= n;i ++)
cin >> a[i];
for (int i = 0;i <= n;i ++)
cin >> b[i];
qb[0] = b[0];
for (int i = 1;i <= n;i ++)
qb[i] = (qb[i-1] + b[i]) % MOD , qa[i] = (qa[i-1] + a[i]) % MOD;
ll k1 = 0;
for (int i = 1;i <= n;i ++)
k1 = (k1 + ((qb[n] - qb[i-1] + MOD) % MOD * a[n + 1 - i] % MOD)) % MOD;
ll k2 = k1 * qpow (qb[n] , MOD - 2) % MOD;
ll k3 = (qa[n] - k2 + MOD) % MOD;
cout << k3;
return 0;
}