当前位置:网站首页>E - Sugoroku 3(期望dp)
E - Sugoroku 3(期望dp)
2022-08-09 23:16:00 【Harris-H】
E - Sugoroku 3(期望dp)
d p i = ∑ j = i i + a i d p j a i + 1 + 1 dp_i=\dfrac{\sum_{j=i}^{i+a_i}dp_j}{a_i+1}+1 dpi=ai+1∑j=ii+aidpj+1
右边的 d p i dp_i dpi 移项得到:
a i a i + 1 d p i = ∑ j = i + 1 i + a i d p j a i + 1 + 1 \dfrac{a_i}{a_{i}+1}dp_i=\dfrac{\sum_{j=i+1}^{i+a_i}dp_j}{a_i+1}+1 ai+1aidpi=ai+1∑j=i+1i+aidpj+1
d p i = ∑ j = i + 1 i + a i d p j a i + a i + 1 a i = ( ∑ j = i + 1 i + a i d p j ) + a i + 1 a i dp_i=\dfrac{\sum_{j=i+1}^{i+a_i}dp_j}{a_i}+\dfrac{a_i+1}{a_i}=\dfrac{(\sum_{j=i+1}^{i+a_i}dp_j)+a_i+1}{a_i} dpi=ai∑j=i+1i+aidpj+aiai+1=ai(∑j=i+1i+aidpj)+ai+1
取模用逆元递推即可。
时间复杂度: O ( n ) O(n) O(n)
// Problem: E - Sugoroku 3
// Contest: AtCoder - LINE Verda Programming Contest(AtCoder Beginner Contest 263)
// URL: https://atcoder.jp/contests/abc263/tasks/abc263_e
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// Date: 2022-08-09 12:44:54
// --------by Herio--------
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=2e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=998244353;
const int hashmod[4] = {
402653189,805306457,1610612741,998244353};
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n){
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y){
if(x<y) x=y;
}
template <typename T>
void cmn(T &x,T y){
if(x>y) x=y;
}
int n;
ll dp[N];
ll suf[N];
ll a[N];
ll inv[N];
ll p=mod;
void init(int n){
inv[1]=1;
for(int i=2;i<=n;i++)
inv[i]=(p-p/i)*inv[p%i]%p;
}
int main(){
ll q = 1;
cin>>n;
rep(i,1,n-1) cin>>a[i];
init(n);
dp[n] = 0;
for(int i=n-1;i;i--){
dp[i] = (suf[i+1]-suf[i+a[i]+1]+a[i]+1)*inv[a[i]]%mod;
suf[i] = (suf[i+1] + dp[i])%mod;
}
printf("%lld",(dp[1]%mod+mod)%mod);
return 0;
}
边栏推荐
猜你喜欢
随机推荐
数字孪生智慧制造生产线项目实施方案,平台认知与概念
用函数统计最长单词的字母数量
构建平衡二叉树「建议收藏」
数据库的备份与恢复「建议收藏」
拒绝“重复造轮子”,百度EasyDL让你玩转AI定制开发
ES6 Beginner to Mastery #13: Extension Methods for Arrays 2
Dry goods!Towards robust test-time adaptation
vmware Exsi 网卡配置
【渗透工具】浏览器数据导出工具
第十二,十三章 mysql数据类型,视图的课后练习
经济衰退即将来临前CIO控制成本的七种方法
70. Stair Climbing Advanced Edition
NotWritableError: The current user does not have write permissions when conda creates a new environment
The latest "Grain Academy Development Tutorial" in 2022: 10 - Front-end payment module
漫谈缺陷管理的自动化实践方案
YOLOV5学习笔记(七)——训练自己数据集
【诗歌】最高级的惩罚就是沉默
conda新建环境时报错NotWritableError: The current user does not have write permissions
MQTT X Web:在线的 MQTT 5.0 客户端工具
组件传值-作用域插槽