淘汰赛制(elimination.pas/c/cpp)
2011-09-23 21:26
471 查看
淘汰赛制(elimination.pas/c/cpp)
【问题描述】
淘汰赛制是一种极其残酷的比赛制度。2n名选手分别标号1,2,3,…,2n-1,2n,他们将要参加n轮的激烈角逐。每一轮中,将所有参加该轮的选手按标号从小到大排序后,第1位与第2位比赛,第3位与第4位比赛,第5位与第6位比赛……只有每场比赛的胜者才有机会参加下一轮的比赛(不会有平局)。这样,每轮将淘汰一半的选手。n轮过后,只剩下一名选手,该选手即为最终的冠军。
现在已知每位选手分别与其他选手比赛获胜的概率,请你预测一下谁夺冠的概率最大。
【输入文件】
输入文件elimination.in。第一行是一个整数n(l≤n≤l0),表示总轮数。接下来2n行,每行2n个整数,第i行第j个是pij(0≤pij≤100,pii=0,pij+pji=100),表示第i号选手与第j号选手比赛获胜的概率。
【输出文件】
输出文件elimination.out。只有一个整数c,表示夺冠概率最大的选手编号(若有多位选手,输出编号最小者)。
【样例输入】
2
0 90 50 50
10 0 10 10
50 90 0 50
50 90 50 0
【样例输出】
1
【数据规模】
30%的数据满足n≤3;100%的数据满足n≤10。
====================================
====================================
【问题描述】
淘汰赛制是一种极其残酷的比赛制度。2n名选手分别标号1,2,3,…,2n-1,2n,他们将要参加n轮的激烈角逐。每一轮中,将所有参加该轮的选手按标号从小到大排序后,第1位与第2位比赛,第3位与第4位比赛,第5位与第6位比赛……只有每场比赛的胜者才有机会参加下一轮的比赛(不会有平局)。这样,每轮将淘汰一半的选手。n轮过后,只剩下一名选手,该选手即为最终的冠军。
现在已知每位选手分别与其他选手比赛获胜的概率,请你预测一下谁夺冠的概率最大。
【输入文件】
输入文件elimination.in。第一行是一个整数n(l≤n≤l0),表示总轮数。接下来2n行,每行2n个整数,第i行第j个是pij(0≤pij≤100,pii=0,pij+pji=100),表示第i号选手与第j号选手比赛获胜的概率。
【输出文件】
输出文件elimination.out。只有一个整数c,表示夺冠概率最大的选手编号(若有多位选手,输出编号最小者)。
【样例输入】
2
0 90 50 50
10 0 10 10
50 90 0 50
50 90 50 0
【样例输出】
1
【数据规模】
30%的数据满足n≤3;100%的数据满足n≤10。
====================================
====================================
var map:array[1..1024,1..1024]of double; f:array[1..1024,1..11]of double; n:longint; procedure init; begin assign(input,'elimination.in'); assign(output,'elimination.out'); reset(input); rewrite(output); end; procedure terminate; begin close(input); close(output); halt; end; procedure dfs(l,r,c:longint); var i,j:longint; mid:longint; t1,t2:double; begin if l=r then exit; mid:=(l+r) shr 1; dfs(l,mid,c+1); dfs(mid+1,r,c+1); for i:=l to mid do begin for j:=mid+1 to r do begin t1:=f[i,c+1]*f[j,c+1]*map[i,j]; t2:=f[i,c+1]*f[j,c+1]*map[j,i]; f[i,c]:=f[i,c]+t1; f[j,c]:=f[j,c]+t2; end; end; end; procedure main; var i,j,np:longint; max_v:double; max_n:longint; begin readln(np); n:=1 shl np; // for i:= for i:=1 to n do for j:=1 to n do begin read(map[i,j]); map[i,j]:=map[i,j]/100; end; fillchar(f,sizeof(f),0); for i:=1 to n do f[i,np+1]:=1; dfs(1,n,1); max_v:=0; for i:=1 to n do begin if max_v<f[i,1] then begin max_v:=f[i,1]; max_n:=i; end; end; writeln(max_n); end; begin init; main; terminate; end.
相关文章推荐
- 1、淘汰赛制(elimination.pas/c/cpp) 动态规划
- 灵渊(seals.cpp/c/pas)
- 2018.01.26【NOIP普及组】模拟赛D组——作业(homework.pas/cpp)
- JZOJ(中山纪中) 1591. 【普及模拟】游戏(j5.pas/cpp)
- 2012_p4 文化之旅 (culture.cpp/c/pas)
- 编辑距离(edit.c/cpp/pas)
- 宝物筛选(Treasure.pas/c/cpp)
- 采药(medic.pas/c/cpp)
- 【利用同余的DP】符文之语(chars. pas/c/cpp)
- 【递推】【动态规划】【数列】第二题 覆盖墙壁(wall.pas/c/cpp)
- 【斐波拉契数列】悟空学艺(Monkey.pas/c/cpp)
- 【字符串处理】文明的复兴 words.pas/c/cpp/in/out
- 【队列模拟】集卡片 card.pas/c/cpp
- 【模拟】相似度 (similar.pas/c/cpp)
- 【动态规划】无聊的数列 line.pas/c/cpp
- BSOI_2261.作弊的发牌者 (cheat.pas/c/cpp)
- 【2014.8.17NOIP普及组模拟】【高精度乘法】公牛数学(bullmath.pas/c/cpp) //2018.2.2
- 配置魔药(medic.pas/c/cpp)
- 最接近神的人(sophist/pas/c/cpp)
- Money Systems(money.pas/c/cpp)