记录编号 77796 评测结果 AAAAAAAAAA
题目名称 网球赛 最终得分 100
用户昵称 Gravatardigital-T 是否通过 通过
代码语言 C++ 运行时间 0.336 s
提交时间 2013-11-02 18:03:37 内存使用 8.86 MiB
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fi("elimination.in");
ofstream fo("elimination.out");
double p[1050][1050],win[1050][11];
int N,Num,group[1050][11];
int main()
{
	fi>>N;
	Num=1<<N;
	for(int i=0;i<Num;i++)
		for(int j=0;j<Num;j++)
		{
			fi>>p[i][j];
			p[i][j]/=100.0;
		}
	for(int i=0;i<Num;i++)win[i][0]=1,group[i][0]=i;
	for(int i=1;i<=N;i++)
	{
		int tmp=1<<i,team=0;
		for(int j=0;j<Num;j++)
		{
			group[j][i]=team;//记录每一组的编号
			if((j+1)%tmp==0)team++;
			//fo<<group[j][i]<<' ';
		}
		//fo<<endl;
	}
	for(int i=1;i<=N;i++)//Round
	{
		int tmp=1<<(i-1);
		for(int j=0;j<Num;j++)
		{
			double possibility=0;
			int k=group[j][i-1]^1;
			int l=k*tmp;
			for(;l<Num && group[l][i-1]==k;l++)
				possibility+=win[l][i-1]*p[j][l];
			win[j][i]=win[j][i-1]*possibility;
		}
	}
	int ans=0;
	for(int i=1;i<Num;i++)
		if(win[i][N]>win[ans][N])ans=i;
	fo<<(ans+1)<<endl;
	return 0;
}