CODE[VS] 1652 淘汰赛制 签到暴力
2016-07-01 15:46
267 查看
【问题描述】
淘汰赛制是一种极其残酷的比赛制度。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 9050 50
100 10 10
5090 0 50
5090 50 0
【样例输出】
1
【数据规模】
30%的数据满足n≤3;100%的数据满足n≤10。
虽然题目在CV上面是钻石难度但是只要暴力把每一个人的概率算出来就可以AC,我是枚举每一次比赛,更新每一个人的(到这场比赛然后)胜利的概率。
贴代码
淘汰赛制是一种极其残酷的比赛制度。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 9050 50
100 10 10
5090 0 50
5090 50 0
【样例输出】
1
【数据规模】
30%的数据满足n≤3;100%的数据满足n≤10。
虽然题目在CV上面是钻石难度但是只要暴力把每一个人的概率算出来就可以AC,我是枚举每一次比赛,更新每一个人的(到这场比赛然后)胜利的概率。
贴代码
var max:real; n,i,m,j,q,p,ans:longint; a:array[0..1025,0..1025]of real; b,d:array[0..1025]of real; procedure bl(a1:longint); var i,p,qq,mid,j,k:longint; c:real; begin for i:=1 to a1 do begin p:=i*q; qq:=(i-1)*q+1; mid:=(p+qq-1) div 2; j:=qq; repeat c:=0; for k:=mid+1 to p do c:=c+a[j,k]*b[k]; d[j]:=b[j]*c; inc(j); until j>mid; p:=i*q; qq:=(i-1)*q+1; mid:=(p+qq-1) div 2; j:=mid+1; repeat c:=0; for k:=qq to mid do c:=c+a[j,k]*b[k]; d[j]:=b[j]*c; inc(j); until j>p end; for i:=1 to m do b[i]:=d[i]; end; begin read(n); m:=1; for i:=1 to n do m:=m*2; for i:=1 to m do for j:=1 to m do begin read(a[i,j]); a[i,j]:=a[i,j]/100; end; for i:=1 to m div 2 do b[i*2-1]:=a[i*2-1,i*2]; for i:=1 to m div 2 do b[i*2]:=a[i*2,i*2-1]; q:=2; for i:=2 to n do begin q:=q*2; bl(m div q); end; for i:=1 to m do if b[i]>max then begin max:=b[i]; ans:=i; end; writeln(ans); end.
相关文章推荐
- 基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
- 一步步解析Python斗牛游戏的概率
- PHP大转盘中奖概率算法实例
- python概率计算器实例分析
- Python使用random和tertools模块解一些经典概率问题
- 数学书籍备忘
- LiLei和HanMeiMei的隐式马尔可夫爱情
- php实现的一段简单概率相关代码
- 用fail2ban阻止SSH和VSFTP暴力破解密码
- 2. 计算机语言的发展过程
- 如何用随机函数rand5来构造随机函数rand7
- 概率最大骰子总和 Topcoder SRM 536 DIV1 第2题
- MFC?VCL?
- 看了“墨绿”那篇小说以后
- Anders Hejlsberg
- 对_stdcall 的理解 (转)
- 匈牙利命名法(百度百科)
- 程序设计
- 函数的调用约定
- 【转】对_stdcall 的理解 (COM学习中的问题)