人,只有自己站起来,这个世界才能属于他。|

园龄:粉丝:关注:

题解:P11617 递推

前言

第一次在 OI 中见到求数列极限的题,有点意思。

但是为什么会过这么多人啊。

思路分析

做一点尝试:

i=mj=0mrjaij=0

然后对于相同的 ai,合并同类项:

i=mj=0mrjai+i=0m1j=0irmjai=0

然后凑出我们的目标:

i=0ai=i=0m1aii=0m1j=0irmjaii=0mri

做完了,不难发现可以 O(m2) 计算和柿。

其实画一个草表也能看出来怎么做,以 m=3 为例:

代码实现

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=998244353;
inline int binpow(int a,int b){
	if(!b) return 1;
	int res=binpow(a,b/2);
	if(b&1) return res*res%mod*a%mod;
	else return res*res%mod;
}
int n,a[30005],r[30005],ans,sumr,suma;
signed main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
		ans=(ans+a[i])%mod;
	}
	for(int i=0;i<=n;i++){
		cin>>r[i];
		sumr=(sumr+r[i])%mod; 
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<=i;j++){
			suma=(suma+r[n-j]*a[i]%mod)%mod;
		}
	}
	ans=(ans-suma*binpow(sumr,mod-2)%mod+mod)%mod;
	cout<<ans;
	return 0;
}

本文作者:Kenma

本文链接:https://www.cnblogs.com/Kenma/p/18696766

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   _Kenma  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起