记录编号 77806 评测结果 AAAAAAAAAA
题目名称 网球赛 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.234 s
提交时间 2013-11-02 18:13:17 内存使用 8.41 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<vector>
using namespace std;
const int SIZEP=1025;
const int SIZEN=11;
int n;
int nump;
double winrate[SIZEP][SIZEP]={0};
double exip[SIZEP][SIZEN]={0};
int pow2[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096};
void init(void){
	scanf("%d",&n);
	nump=pow2[n];
	int i,j;
	for(i=1;i<=nump;i++){
		for(j=1;j<=nump;j++){
			scanf("%lf",&winrate[i][j]);
			winrate[i][j]/=100;
		}
	}
	for(i=1;i<=nump;i++) exip[i][0]=1;
}
void dp(void){
	int i,j,k;
	int ablenum;
	int start,end,mid;
	for(k=0;k<n;k++){
		ablenum=pow2[k+1];
		for(i=1;i<=nump;i++){
			start=((i-1)/ablenum)*ablenum+1;
			end=start+ablenum-1;
			mid=(start+end)>>1;
			if(i<=mid) start=mid+1;
			else end=mid;
			for(j=start;j<=end;j++){
				exip[i][k+1]+=exip[j][k]*winrate[i][j];
			}
			exip[i][k+1]*=exip[i][k];
		}
	}
}
void answer(void){
	double ansp=0;
	int ans=0;
	int i;
	for(i=1;i<=nump;i++){
		if(exip[i][n]>ansp){
			ansp=exip[i][n];
			ans=i;
		}
	}
	printf("%d\n",ans);
}
int main(){
	freopen("elimination.in","r",stdin);
	freopen("elimination.out","w",stdout);
	init();
	dp();
	answer();
	return 0;
}