\(\tt\) 很喜歡玩遊戲, 今天他決定和朋友們玩錦標賽遊戲。
錦標賽遊戲的規則是這樣的: 一共有 \(i(1≤i≤n)\)個人參與遊戲, 每個人都編上號( 之後用編號代替人)。
任意兩個人之間都要進行一場比賽( 即單迴圈賽制), 每一場比賽雙方獲勝的概率都是 \(0.5\)。 對於兩個人 \(x\) 和 \(y\)
\((1≤x,y≤i)\), 如果 \(x=y\) 或存在乙個序列\((a_1,a_2,\dots,a_m)(m≥2)\),滿足 \(a_1\) 戰勝了 \(a_2\), \(a_2\) 戰勝了 \(a_3\), \(\dots\), \(a_\) 戰勝了 \(a_m\), 且 \(a_1=x\), \(a_m=y\), 則稱 \(x\) 不弱於 \(y\)。 如果 \(x\) 不弱於 \(y\) 且 $y $不弱於 \(x\), 則稱 $x $和 \(y\) 是實力相當的。 比賽結束後會給每個人發獎金。 如果某個人\(j(1≤j≤i)\)有 \(k(1≤k≤n)\)個人和他實力相當, 則給他發 \(d_k\) 元獎金。 獎金最多的人獲勝。
\(\tt\) 很想贏得遊戲, 但他太笨了, 他想讓你幫他算出對於每乙個 \(i\), 所有編號的期望獎金的最大值是多少。 這個數字可能不是有限小數, 所以你需要求的是答案 \(\bmod 998244353\)的結果。
第一行包含乙個整數 \(n\), 表示最大人數。
接下來 \(n\) 行, 第\((i+1)\)行包含乙個整數 \(d_i\), 表示有 \(i\) 個人實力相當時獲得的獎金。
輸出 \(n\) 行, 第 \(i\) 行包含乙個整數, 表示 \(i\) 個人參與遊戲時所有編號的期望獎金的最大值\(\bmod 998244353\) 的結果。
對於 \(30\%\) 的資料, 滿足 \(n≤7\)。
對於 \(100\%\) 的資料, 滿足 \(n≤3000\)。
內什麼,暴力的複雜度是\(o(n^22^})\)的
就是列舉邊的方向求一下聯通分量的大小就好了,考場上複雜度算錯了就沒打...沒打,虧了\(30pts\)
正解有點厲害。
發現每個點的期望是一樣的,我們不妨求出每個大小的圖的總貢獻,然後除以情況和點的數量。
令\(a_i\)代表\(i\)個點組成競賽圖時形成強連通分量的圖的個數。
那麼對於乙個大小為\(n\)的競賽圖,我們有
\[2^}=\sum_^n2^}\ \ \ \ \binoma_i
\]左邊代表邊的總情況,右邊我們列舉縮點\(\tt\)排序後最後乙個新點的大小。
右邊的情況分別為,其他點的任意連邊集合,選擇組成新點的情況,組成強連通點的情況。
注意其他點向強連通點的連邊只有一種方向,所以方案是\(1\)
這樣的話我們可以得出\(a_n\)的乙個遞推式
\(a_n=2^}-\sum_^2^}\binoma_i\)
設\(f_i\)代表\(i\)個點組成的圖的所有情況的貢獻和,則有
\[f_n=\sum_^n\binoma_i(f_+id_i2^}\ \ \ )
\]理解起來和上面差不多吧。
直接實現遞推是\(o(n^2)\)的,據說可以用\(\tt\)優化到\(o(nlogn)\)
code:
#include #define ll long long
const ll mod=998244353ll;
const int n=3000;
ll po[n*n+10],c[n+10][n+10],a[n+10],f[n+10],d[n+10];
int n;
void init()
for(int i=1;i<=n*n;i++) po[i]=po[i-1]*2%mod;
}ll quickpow(ll d,ll k)
return f;
}int main()
{ init();
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",d+i);
a[1]=1;
for(int i=2;i<=n;i++)
{for(int j=1;j2018.10.29
錦標賽問題 遞迴
設有n位選手參加網球迴圈賽,n 2 k,迴圈賽共進行n 1天,每位選手要與其他n 1位選手比賽一場,且每位選手每天比賽一場,不能輪空,按一下要求為比賽安排日程,1 每位選手必須與其他n 1格選手格賽一場 2 每個選手每天只能賽一場 3 迴圈賽一共進行n 1天 請按此要求將比賽日程表設計成有n行和n ...
NOIP模擬 錦標賽
403機房最近決定舉行一場錦標賽。錦標賽共有n個人參加,共進行n 1輪。第一輪隨機挑選兩名選手進行決鬥,勝者進入下一輪的比賽,第二輪到第n 1輪再每輪隨機挑選1名選手與上一輪勝利的選手決鬥,最後只剩一輪選手。第i名選手與第j名選手決鬥,第i名選手勝利的概率是a i j 作為一號選手的富欖想知道如何安...
牛客 錦標賽
組委會正在為美團點評codem大賽的決賽設計新賽制。比賽有 n 個人參加 其中 n 為2的冪 每個參賽者根據資格賽和預賽 複賽的成績,會有不同的積分。比賽採取錦標賽賽制,分輪次進行,設某一輪有 m個人參加,那麼參賽者會被分為 m 2 組,每組恰好 2 人,m 2組的人分別廝殺。我們假定積分高的人肯定...