题目链接
思路:
根据题意,我们可以很清晰的判断数组只需要选取竖着的长条即可,水平选取只会让结果更趋近于平均值,所以我们直接暴力跑每一个竖直位置并且让每一个位置都当一次底求出最大值即可。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=1e5+7;
const double eps=1e-8;
const int mod=1e9+7;
const int inf=0x7fffffff;
const double pi=3.1415926;
signed main()
{
IOS;
int t;
cin>>t;
while(t--)
{
int n,m;
double num=0,arr[205][205];
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>arr[i][j];
}
}
for(int i=0;i<m;i++)
{
double sum=0;
for(int j=0;j<n;j++)
{
sum+=arr[j][i];
num=max(num,sum/arr[j][i]);
}
}
printf("%.8lf\n",num);
}
return 0;
}
本文介绍了一种通过暴力枚举竖直位置来求解数组中最大值的算法策略。该算法避免了水平选取,专注于竖直方向上的计算,以找到数组中最大的平均值。通过遍历每个竖直位置并计算其作为底的平均值,最终确定最大值。
223

被折叠的 条评论
为什么被折叠?



