集訓隊作業2018 矩陣玩小凹 NTT

2022-03-25 17:28:05 字數 2400 閱讀 7489

有乙個 \(n\times m\) 的矩陣 \(a\),每個元素都是 \([0,1]\) 內的等概率隨機實數,記 \(s_i=\sum_^ma_\),求 \(\lfloor\min s_i\rfloor^k\) 的期望。

對 \(998244353\) 取模。

\(n\leq ^9,m\leq 5\times ^5,k\leq ^9\)

我們只用求 \(\lfloor s_i\rfloor\) 為 \(0\) 到 \(m-1\) 中每個值的概率就好了。

記 \(b_i=\sum_^ia_-\lfloor\sum_^ia_\rfloor,c_i=\lfloor\sum_^ia_\rfloor\),那麼 \(b_i\) 也在 \([0,1]\) 間等概率隨機。我們可以直接忽略 \(b_i\) 相同的情況。這樣就可以把 \(b\) 看成乙個排列。

可以發現,\(c_i>c_\) 當且僅當 \(b_i。

那麼只用對於每個 \(i\) 計算有多少種 \(c_j>c_\) 的個數為 \(i\) 的情況就好了。記這個東西為 \(a_\)。

怎麼算呢?

那麼 \(\frac\sum_^ma_\) 為 \(x_1+x_2+\ldots+x_n\leq m+1(0\leq x_i\leq 1)\) 的概率

記 \(h_n(x)\) 為 \(x_1+x_2+\ldots+x_n\leq x(x_i\geq 0)\) 的概率。

那麼有\[h_1(x)=x\\

h_i(x)=\int_0^xh_(x-z)~dz=\int_0^xh_(z)~dz=\frac

\]列舉有多少個 \(x_i>1\) 進行容斥,那麼就有:

\[\begin

\frac\sum_^ma_&=\sum_^^i\binomh_n(m+1-i)\\

\fraca_&=\sum_^^i\binomh_n(m+1-i)-\sum_^^i\binomh_n(m-i)\\

&=\sum_^^i\binomh_n(m+1-i)+\sum_^^i\binomh_n(m+1-i)\\

&=\sum_^^i\binomh_n(m+1-i)\\

&=\frac\sum_^^i\binom^n\\

a_&=\sum_^^i\binom^n

\end

\]這樣就可以在 \(o(m\log m)\) 內計算出 \(a_\ldots a_\) 了。

時間複雜度:\(o(m\log m)\)

#include#include#include#include#include#include#include#include#include//using namespace std;

using std::min;

using std::max;

using std::swap;

using std::sort;

using std::reverse;

using std::random_shuffle;

using std::lower_bound;

using std::upper_bound;

using std::unique;

using std::vector;

typedef long long ll;

typedef unsigned long long ull;

typedef double db;

typedef std::pairpii;

typedef std::pairpll;

void open(const char *s)

void open2(const char *s)

int rd()dowhile((c=getchar())>='0'&&c<='9');return b?-s:s;}

void put(int x)static int c[20];int t=0;while(x)while(t)putchar(c[t--]+'0');}

int upmin(int &a,int b)return 0;}

const int n=1200000;

const ll p=998244353;

ll fp(ll a,ll b)

namespace ntt

for(int i=2;i<=n;i<<=1)

for(int j=0;j=0;i--)

f[i]=(f[i]+f[i+1])%p;

for(int i=0;if[i]=fp(f[i],n)%p;

for(int i=0;if[i]=(f[i]-f[i+1])%p;

ll ans=0;

for(int i=0;ians=(ans+fp(i,k)*f[i])%p;

ans=(ans%p+p)%p;

printf("%lld\n",ans);

return 0;

}

集訓隊作業2018 小Z的禮物

小水題。題意就是不斷隨機放乙個 1 times 2 骨牌,然後取走裡面的東西。求期望多少次取走所有的東西。然後有一維很小。首先顯然 minmax 容斥,將最後取走轉化為欽定一些物品,求第乙個取走的期望。然後顯然第乙個取走的期望只和剩下能蓋到物品的骨牌數有關。乙個骨牌能蓋到物品只和相鄰的兩個格仔是否欽...

集訓隊作業2018 喂鴿子

設 f n 表示有 n 只鴿子,每次等概率選乙隻喂,期望餵飽第一只鴿子的時間,f 表示有 n 只鴿子,已經喂了 m 次,此時這 n 只鴿子中沒有鴿子被餵飽的概率。ans sum n 1 f i f n sum sum f frac sum f sum frac 注意到有 dfrac n sum x ...

集訓隊作業2018 GAME(並查集)

題意 題解 把這個dp式子給列出來 f i si max j f i s i max j fi si jmax 把這個字尾max max max記為m mm的話,每次就是m max m max m m max,考慮對於初始的每個m mm都維護一下,發現是條折線,維護一下這個折線,每次可以把小的一半合...