牛客(多校6):Combination of Physics and Maths

牛客(多校6):Combination of Physics and Maths_第1张图片
牛客(多校6):Combination of Physics and Maths_第2张图片
示例1:
输入

1
3 3
1 3 5
6 8 9
2 7 4

输出

4.50000000

牛客(多校6):Combination of Physics and Maths_第3张图片
分析:这道题是关于压强的问题,从题意中我们不难发现,随着单列压力量的变化,底面积也在变化,那么我们建立一个立体模型,至于为什么一会你就知道了。
单列中添加元素代表压力(放到最下面的代表受力面积),(P=F/S),题目要求压强最大,那么我们不如边输入边计算,想象着质量底面积不同的圆盘摞在一起,这里你就知道我们为什么要建立立体模型了,其实是一种思想了,嘿嘿!这种做法貌似和题目要求的有差别,不过很高效。
我们走一遍,如图:1-1
牛客(多校6):Combination of Physics and Maths_第4张图片
看一下上图为9/2的结果的P值,你就该明白为什么题目的说明中取第一列和最后一列,而结果还是9/2了。
到这就完了,下面代码奉上:

#include 
using namespace std;
const int N = 300;
double Sum[N][N];
int main()
{ 
    ios::sync_with_stdio(false); cin.tie(0);
    int T;
    cin>>T;
    while(T--){
        int n,m;
        cin>>n>>m;
        int A;
        double tem = 0;
        for(int i = 1;i<=n;i++)
        {//注意i和j都要从1开始,便于下面的递推
            for(int j = 1;j<=m;j++){
                cin>>A;
                Sum[i][j] = Sum[i-1][j]+A;
                tem = max(tem,Sum[i][j]*1.0/A);//由于Sum是int类型,所以最好*1.0,不乘也没关系,你晓得为啥
            }
        } 
        printf("%.8f\n",tem);
        memset(Sum,0,sizeof Sum);//有人认为这句是多余的,但是你看一下前面的T,你就知道它就是你的唯一了
    }
}

你可能感兴趣的:(ACM)