1 条题解
-
0
虽然说理论上有点极限,但是没有问题的,还有点小快,峰值时间才39ms。
思路
考虑概率DP。表示第i秒时切歌(一首歌结束)的概率,枚举和表是第几秒和上一首是第几首,转移方程详见代码。最终答案其实就是,也就是最后一次切歌切到第1收的概率之和
AC代码
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e4+10,P=998244353; int qpow(int a,int b) { int res=1; for(;b;b>>=1,a=a*a%P)if(b&1)res=res*a%P; return res; } int f[N],a[N]; signed main() { int n,x;scanf("%lld%lld",&n,&x); int _n=qpow(n,P-2); for(int i=1;i<=n;i++)scanf("%lld",&a[i]); f[0]=1; for(int i=1;i<=x;i++)for(int j=1;j<=n;j++) { if(i>=a[j])f[i]=(f[i]+_n*f[i-a[j]]%P)%P; } int ans=0; for(int i=max(0ll,x-a[1]+1);i<=x;i++)ans=(ans+_n*f[i]%P)%P; printf("%lld\n",ans); return 0; }
- 1
信息
- ID
- 8812
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 2
- 上传者