专栏文章
题解:P11617 递推
P11617题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqealsi
- 此快照首次捕获于
- 2025/12/04 03:23 3 个月前
- 此快照最后确认于
- 2025/12/04 03:23 3 个月前
一开始并没有什么思路,于是考虑依次写出 的递推式:
发现存在规律,故最后写项数趋近正无穷时的递推式收尾:
其中 趋近于正无穷。
将以上式子合并,可得:
由于 的所有项之和收敛,故当 趋近于正无穷时, 趋近于 ,对所有项之和的影响趋近于 ,故可以忽略 一项。
为便于理解,下文用 (即正无穷)替代 。
不妨记 。
则原式化简为 。
式子中 可以通过前缀和或后缀和 求出,然后由于题目保证答案可以在模 意义下表示,故可以使用费马小定理求出 在模 意义下的逆元(记为 ),记 为 ,则在模 意义下 。 而 可以在 时间内简单求出。
最后答案即为 ,时间复杂度 ,空间复杂度 。
PS:记得计算乘积时及时取模。
参考代码:
CPP发现存在规律,故最后写项数趋近正无穷时的递推式收尾:
其中 趋近于正无穷。
将以上式子合并,可得:
由于 的所有项之和收敛,故当 趋近于正无穷时, 趋近于 ,对所有项之和的影响趋近于 ,故可以忽略 一项。
为便于理解,下文用 (即正无穷)替代 。
不妨记 。
则原式化简为 。
式子中 可以通过前缀和或后缀和 求出,然后由于题目保证答案可以在模 意义下表示,故可以使用费马小定理求出 在模 意义下的逆元(记为 ),记 为 ,则在模 意义下 。 而 可以在 时间内简单求出。
最后答案即为 ,时间复杂度 ,空间复杂度 。
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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...