题意:n个数ai,和n个计数器ci(初始都为0),每次等概率选一个计数器置0,其他计数器+1,求所有计数器变成ai的期望次数。(a1=0,n<=2e5,ai<=1e18,ai数组不减)
Solution:
\quad
设置一个状态
s
t
a
t
e
=
m
a
x
(
a
i
−
c
i
)
state = max(a_i-c_i)
state=max(ai−ci),当state = 0时就结束了,初始state =
a
n
a_n
an。
\quad
设
E
k
E_k
Ek表示state=k时到达state=0的期望次数。每次操作将某个
a
i
−
c
i
a_i-c_i
ai−ci变成
a
i
a_i
ai,state变成
m
a
x
(
a
i
,
a
j
−
c
j
−
1
)
,
j
≠
i
max(a_i,a_j-c_j-1),j\neq i
max(ai,aj−cj−1),j=i
state=k时,如果选择
a
i
<
k
a_i<k
ai<k去置0,则state不变。
如果选择ai>=k去置0,则state = k-> state =
a
i
a_i
ai。
设
a
r
<
k
<
=
a
r
+
1
a_r<k<=a_{r+1}
ar<k<=ar+1(即最大的ai,小于k),有
E
k
=
1
+
1
n
(
r
E
k
−
1
+
∑
j
=
r
+
1
n
E
a
j
)
=
>
E
k
−
1
=
1
r
(
n
(
E
k
−
1
)
−
∑
j
=
r
+
1
n
E
a
j
)
E_k =1+\frac{1}{n}(rE_{k-1}+\sum_{j=r+1}^n E_{a_j})=>E_{k-1} = \frac{1}{r}(n(E_k-1)-\sum_{j=r+1}^n E_{a_j})
Ek=1+n1(rEk−1+∑j=r+1nEaj)=>Ek−1=r1(n(Ek−1)−∑j=r+1nEaj)。
然后我们已知
E
0
=
0
,
要求
E
a
n
E_0=0,要求E_{a_n}
E0=0,要求Ean,而这个递推式的顺序是反的。改写一下
设
T
k
=
E
a
n
−
E
k
T_k = E_{a_n}-E_k
Tk=Ean−Ek,已知
T
a
n
=
0
要求
T_{a_n}=0要求
Tan=0要求
T
0
T_0
T0
E
a
n
−
E
k
−
1
=
E
a
n
−
1
r
(
n
(
E
k
−
1
)
−
∑
j
=
r
+
1
n
E
a
j
)
=
T
k
−
1
=
1
r
(
n
(
T
k
+
1
)
−
∑
j
=
r
+
1
n
T
a
j
)
,
a
r
<
k
<
=
a
r
+
1
E_{a_n}-E_{k-1} =E_{a_n}- \frac{1}{r}(n(E_k-1)-\sum_{j=r+1}^n E_{a_j})=\\ T_{k-1}=\frac{1}{r}(n(T_k+1)-\sum_{j=r+1}^n T_{a_j}),a_r<k<=a_{r+1}
Ean−Ek−1=Ean−r1(n(Ek−1)−∑j=r+1nEaj)=Tk−1=r1(n(Tk+1)−∑j=r+1nTaj),ar<k<=ar+1
现在就可以倒着推了。
式子后面的
∑
j
=
r
+
1
n
T
a
j
\sum_{j=r+1}^n T_{a_j}
∑j=r+1nTaj,对于一些k是不会变的,也就是说只会变n-1次,所以可以看作常数,然后枚举这段变化。
设
s
=
∑
j
=
r
+
1
n
T
a
j
,
a
r
<
k
<
=
a
r
+
1
s =\sum_{j=r+1}^n T_{a_j},a_r<k<=a_{r+1}
s=∑j=r+1nTaj,ar<k<=ar+1
上式 =
T
k
−
1
=
1
r
(
n
(
T
k
+
1
)
−
s
)
=
n
r
T
k
+
n
−
s
r
T_{k-1}=\frac{1}{r}(n(T_k+1)-s)=\frac{n}{r}T_k+\frac{n-s}{r}
Tk−1=r1(n(Tk+1)−s)=rnTk+rn−s。
这里有个trick,当递推式是 f ( i ) = A ∗ f ( i − 1 ) + B ,可以改写成 f ( i ) + D = A i − j ( f ( j ) + D ) ,其中 D = B A − 1 且 A ≠ 1 f(i) = A*f(i-1)+B,可以改写成f(i)+D = A^{i-j}(f(j)+D),其中D=\frac{B}{A-1}且A\neq1 f(i)=A∗f(i−1)+B,可以改写成f(i)+D=Ai−j(f(j)+D),其中D=A−1B且A=1。
这里
D
=
n
−
s
n
−
r
,且
A
不会为
0
D=\frac{n-s}{n-r},且A不会为0
D=n−rn−s,且A不会为0
有
T
a
r
+
D
=
(
n
r
)
i
−
j
(
T
a
r
+
1
+
D
)
=
>
T
a
r
=
(
n
r
)
i
−
j
(
T
a
r
+
1
+
D
)
−
D
T_{a_r}+D=(\frac{n}{r})^{i-j}(T_{a_{r+1}}+D)=>T_{a_r}=(\frac{n}{r})^{i-j}(T_{a_{r+1}}+D)-D
Tar+D=(rn)i−j(Tar+1+D)=>Tar=(rn)i−j(Tar+1+D)−D,
递推的时候每次更新
s
−
>
s
+
T
a
j
,
其中
s
a
n
=
0
,
T
a
n
=
0
s->s+T_{a_j},其中s_{a_n}=0,T_{a_n}=0
s−>s+Taj,其中san=0,Tan=0。
c神说可以直接设 f k f_k fk表示第一次到达state=k的期望次数,然后可以直接得到上面T式子,似乎是用了期望的可加性,想了好久还不是很懂这个第一次的概念orz,QAQ
#define int long long
const int N=2e5+10;
const int mod=998244353;
const double eps=1e-8;
int n;
int a[N];
ll qsm(int a,int b){
ll ans = 1,tmp = a;
while( b ){
if( b&1 ) ans = ans * tmp%mod;
tmp = tmp * tmp%mod;
b>>=1;
}
return ans;
}
int ni(int x){return qsm(x,mod-2);}
signed main(){
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
IOS;
cin>>n;
_for(i,1,n) cin>>a[i];
int sr = 0 , E = 0;
_rep(i,n-1,1){
int r = i;
int t = n *ni(r)%mod;
int A = qsm(t,a[i+1] - a[i])%mod;
int B = (n - sr + mod)%mod * ni(n-r+mod)%mod;
E = A * (E + B)%mod - B + mod;
E %= mod;
sr = ( sr + E )%mod;
}
cout<<E<<endl;
}