现在的位置: 首页 > 综合 > 正文

Magic Rankings | CodeChef

2018年01月15日 ⁄ 综合 ⁄ 共 2902字 ⁄ 字号 评论关闭
文章目录

Magic Rankings

Everybody loves magic, especially magicians who compete for glory on the Byteland Magic Tournament. Magician Cyael is one such magician.

Cyael has been having some issues with her last performances and today she’ll have to perform for an audience of some judges, who will change her tournament ranking, possibly increasing it. As she is a great magician she managed to gather a description of
the fixed judges’ disposition on the room (which is represented as an N ×N square matrix), such that she knows in advance the fixed points each judge will provide. She also knows that the room is divided into several parallel
corridors, such that we will denote thej-th cell on corridor
i
, as [i][j]. Note that some judges can award Cyael, zero points or negative points, as they are never pleased with her performance.

There is just one judge at each cell of the matrix, except the cells [1][1] and[N][N].

To complete her evaluation, she must start on the top leftmost corner of the room (cell[1][1]), and finish on the bottom right corner (cell[N][N]), moving either to the cell directly in front of her on the same corridor
(that is, moving from cell[r][c] to cell[r][c+1], where
c+1N) or to the cell in the next corridor directly in front of where she is (that is, moving from cell[r][c] to cell[r+1][c], where
r+1N). She will keep doing this until she reaches the end point of the room, i.e. last cell[N][N] on the last corridor. Cyael will be judged at all visited cells with a judge.

Cyael wants to maximize her average score at end of her performance. More specifically, if she passesK judges, each being on cell[i1][j1], cell[i2][j2], ..., cell[iK][jK]
respectively, then she wants to maximize (S[i1][j1] +S[i2][j2] + ... +S[iK][jK]) /K, where
S[i][j] denotes the points that the judge will give her on the cell[i][j].

Help her determine the best path she has to follow in order to maximize her average points.

Input

The first line contains a single integer T denoting the number of test cases. The description forT test cases follows. For each test case, the first line contains a single integerN. Each of the nextN
lines contains N space-separated integers.
The j-th integer S[i][j] in i-th line denotes the points awarded by the judge at cell[i][j].
Note that the cells [1][1] and [N][N] have no judges, soS[1][1] andS[N][N] will be 0.

Output

For each test case, if the maximum possible average points Cyael can obtain is negative, output a single line containing "Bad Judges" (quotes for clarity). Otherwise, output the maximum possible average points. The answer will be considered correct if it
has an absolute error no more than 10-6.

Constraints

1 ≤ T ≤ 20
2 ≤ N ≤ 100
-2500 ≤ S[i][j] ≤ 2500
S[1][1] = S[N][N] = 0

Your code will be judged against several input files.

Example

Input:
2
2
0 -4
8 0
2
0 -45
-3  0


Output:
8.000000
Bad Judges

//题目是个简单的递推题,关键在于注意d数组边界的初始化,不能初始为0

#include<stdio.h>
#include<string.h>

#define max(a,b) (a>b?a:b)

double num[110][110],d[110][110];


int main()
{
	int T;
	scanf("%d",&T);
	d[0][1]=d[1][0]=0;
	for(int i=2;i<=100;i++)
	{
		d[0][i]=-30000000;
		d[i][0]=-30000000;
	}
	while(T--)
	{
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
			{
				scanf("%lf",&num[i][j]);
			}
		num[1][1]=0;	num[n][n]=0;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
			{
				d[i][j]=max(d[i-1][j],d[i][j-1])+num[i][j];
			}
		double s=d[n][n]/double(2*n-3);
		if(s<0)
			printf("Bad Judges\n");
		else
			printf("%lf\n",s);
	}
	return 0;
}

 

【上篇】
【下篇】

抱歉!评论已关闭.