当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

Digital wallets, red sea ecological rapid introduction of small programs can help capture device entry wisdom

SRv6 performance measurement

How to know the computer boot record?

数字孪生电力系统,可视化应用实现科学调度的电子设备

ES6 Beginner to Mastery #13: Extension Methods for Arrays 2

Gumbel distribution of discrete choice model

A summary of 6 common tools for cross-border e-commerce

【集训DAY3】中位数

了解什么是架构基本概念和架构本质

ES6 从入门到精通 # 12:数组的扩展方法一
随机推荐
Has your phone ever been monitored?
【Infiltration tool】Browser data export tool
下班后用微信处理工作时发病身亡,法院判决:工伤!
CAD 截断线段
解锁时间生成与比较
RebatMq消息中间件(一) 各个中间件介绍
New window Display Agreement
ABAP中Collect的用法
KingbaseGIS Jin Cang database using manual (6.3. Geometric object creation function)
CST Studio Suite 2021软件安装包和安装教程
Golden Warehouse Database KingbaseGIS User Manual (6.4. Geometry Object Access Function)
Pinduoduo store operation must know to leave a little knowledge of operation
【集训DAY3】中位数
68. qt quick-qml multi-level folding drop-down navigation menu supports dynamic add/unload, support qml/widget loading, etc.
ECCV 2022 | Microsoft Open Source TinyViT: Pre-training Capabilities for Small Models
《动手学深度学习》(八) -- 多尺度标检测和单发多框检测
【猜凶手,猜名次,杨辉三角】经典小学奥数的代码逻辑是什么?
了解什么是架构基本概念和架构本质
数据库优化 | 干货
生成树和交换的总结