暑期個人賽 第八場 D

2021-06-23 01:00:43 字數 1813 閱讀 5207

時間限制 1000 ms

記憶體限制 65536 kb

明光村迎來了一年一度的盛世——解碼錦標賽,有 2^n 次個隊伍從世界各村趕來參與比賽,編號為 1 - 2^n。賽制為每一輪晉級一半隊伍,按序號大小兩兩比賽,淘汰弱者。一輪結束後,所有的勝者進入下一輪,依舊是按順序兩兩比賽。比如第一輪就是 1 vs 2, 3 vs 4 ... 2^n - 1 vs 2^n。在一旁圍觀的 mays 學姐告訴你,n次比賽後的勝者是唯一的。現在你拿到了乙份各個參賽隊伍的對抗勝率表 win,為 2^n * 2^n 的矩陣, win[i][j] 為一位小數,代表i勝j的概率。 

你能告訴 mays 學姐最有可能獲得世界冠軍的是那支隊伍嗎?

多組資料。每組第一行為 n ,n <= 8,接下來 n 行 n 列為對抗勝率矩陣。 保證 win[i][j] + win[j][i] = 1 (i != j)。 以 n=0 結束輸入。 

對每組資料,輸出勝率最大的隊伍的序號。如果最大的兩個概率相差不到 0.001,則認為勝率相等,輸出序號最小者。

2

0.0 0.1 0.2 0.3

0.9 0.0 0.4 0.5

0.8 0.6 0.0 0.6

0.7 0.5 0.4 0.0

20.0 0.8 0.1 0.4

0.2 0.0 0.2 0.6

0.9 0.8 0.0 0.3

0.6 0.4 0.7 0.0

0

2

4

賽中提交:null

賽後ac:y

題目大意:

有2的n次方個人伍參加比賽,採用兩兩淘汰晉級制(七龍珠的武道大會),求最後勝率最大的人。

思路:也就是說要決出最終勝者,乙個人一共要打n場比賽。

很明顯這是乙個dfs的題目,在乙個完美二叉樹上做遞迴運算,再加上記憶化搜尋優化時間

遞推式:

dp[i][j]表示第i號選手在第j次比賽中獲勝的概率。

p[i][j]表示第i號選手擊敗第j號選手的概率

dp[i][j]=dp[i][j-1]*segma(dp[k][j-1]*p[i][k]) (k為i在第n次比賽中的兄弟樹的所有最末尾的孫子序號)

下面是ac**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define maxn 500

using namespace std;

double dp[maxn][10],p[maxn][maxn];

int n;

const double eps=0.001;

double dfs(int num,int level)

else

}else

}//printf("aaaa%lf\n",sum);

return dp[num][level]=dfs(num,level-1)*sum;

}}int main()

int n=pow(2,n);

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

}for(int i=1;i<=n;i+=1)}}

double maxp=0,tmp;

int ans=0;

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

}printf("%d\n",ans);

}return 0;

}

暑期個人賽 第八場 A

a.遊戲 2014新生暑假個人排位賽08 時間限制 1000 ms 記憶體限制 65536 kb 小弱發明了乙個好玩的遊戲,遊戲開始時給你乙個凸多邊形,這個多邊形可以任意旋轉,平移。讓你造出乙個正方形 容器 足夠大 容器的兩邊垂直,兩邊水平。用這個容器把這個多邊形完全包含,且多邊形有且只有一條邊恰好...

暑期個人賽 第五場 D

時間限制 1000 ms 記憶體限制 65536 kb 已知函式f,f 0 f 1 1,對於所有n 2,f n f n 1 f n 2 n。給定n,求f n 第一行乙個整數t,表示組數,t 1000。之後t行每行乙個整數n,0 n 1e9。對於每組測試組,輸出一行f n 1000000007.612...

暑期個人賽 第三場 A

a.學姐的數碼管 2014新生暑假個人排位賽03 時間限制 1000 ms 記憶體限制 65536 kb 題目描述 學姐的七段數碼管玩的出神入化。現在給你乙個浮點數,你需要把它以七段數碼管的形式輸出出來。乙個 2 n 1 n的矩陣來表示七段數碼管,若下標均從0開始,則以第0列的兩個,第n 1列的兩個...