牛客第六场-Combination of Physics and Maths

简介: 题意:选出一个子矩阵,使得所求的压强最大,压强是指这个子矩阵中每个元素之和 / 这个子矩阵最下面一行的元素之和

题目链接


微信图片_20220530181602.png

微信图片_20220530181643.png


打了六场牛客了,第一次写一篇这题的博客叭

对我个人来讲,这个题可能是卡我平时的代码习惯或者是代码风格以及不好的写法(被安排得十分安详)


题意:选出一个子矩阵,使得所求的压强最大,压强是指这个子矩阵中每个元素之和 / 这个子矩阵最下面一行的元素之和

当然这个题选一列就完事了,多选了反而还比较麻烦。只需要维护每一列元素的前缀和,并且在计算的过程中除以当前这个数,这样就OK,记得要维护当前的最大压强值

代码比较简单,没有什么新鲜感,平平无奇


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll read() {
    ll c = getchar(), Nig = 1, x = 0; while (!isdigit(c) && c != '-')c = getchar();
    if (c == '-')Nig = -1, c = getchar();
    while (isdigit(c))x = ((x << 1) + (x << 3)) + (c ^ '0'), c = getchar();
    return Nig * x;
}
#define read read()
double a[208][208];
double sum[208];
int main() {
    int T = read;
    while (T--) {
        int n = read, m = read;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) scanf("%lf", &a[i][j]);
        }
        double ans = 0;
        for (int i = 1; i <= m; i++) {
            sum[i] = 0;
            for (int j = 1; j <= n; j++) {
                sum[i] += a[j][i];
                double tt = (sum[i]) / (a[j][i]);
                if (tt > ans) ans = tt;
            }
        }
        printf("%.8f\n", ans);
    }
    return 0;
}
/**
1
3 3
1 3 5
6 8 9
2 7 4
**/


重点是想要通过这篇博客记录自己的不足:


  1. 没必要浪费不必要的时间复杂度来初始化数组,如果在下面处理问题的时候可以顺便把数组初始化在使用的情况下,就不必要在开头进行初始化。


  1. 如果遇到要除法得到小数点后面几位的时候,可以考虑将需要用到的数组设置为double类型,一面会发生十分玄学的问题。


  1. 手贱分不出n or m


开发者涨薪指南

48位大咖的思考法则、工作方式、逻辑体系

目录
相关文章
|
7月前
codeforces 285C - Building Permutation
题目大意是有一个含n个数的数组,你可以通过+1或者-1的操作使得其中的数是1--n中的数,且没有重复的数。 既然是这样的题意,那么我就应该把原数组中的数尽量往他最接近1--n中的位置放,然后求差绝对值之和,但有多个数,怎么使他们和最小,这样就要对其进行排序了,直接按大小给它们安排好位置,然后计算。
19 0
|
7月前
|
数据安全/隐私保护
[BJDCTF2020]BJD hamburger competition 题解
[BJDCTF2020]BJD hamburger competition 题解
23 0
|
9月前
UVa10776 - Determine The Combination(有重复元素的组合问题)
UVa10776 - Determine The Combination(有重复元素的组合问题)
29 0
|
11月前
|
机器学习/深度学习 存储 C++
【PAT甲级 - C++题解】1004 Counting Leaves
【PAT甲级 - C++题解】1004 Counting Leaves
47 0
|
11月前
|
C++
【PAT甲级 - C++题解】1096 Consecutive Factors
【PAT甲级 - C++题解】1096 Consecutive Factors
49 0
AtCoder Beginner Contest 221 E - LEQ(组合数学 树状数组)
AtCoder Beginner Contest 221 E - LEQ(组合数学 树状数组)
131 0
|
算法
AtCoder Beginner Contest 213 E - Stronger Takahashi(01BFS)
AtCoder Beginner Contest 213 E - Stronger Takahashi(01BFS)
105 0
AtCoder Beginner Contest 216 G - 01Sequence (并查集 贪心 树状数组 差分约束)
AtCoder Beginner Contest 216 G - 01Sequence (并查集 贪心 树状数组 差分约束)
105 0
AtCoder Beginner Contest 226 E - Just one(dfs求连通块 组合数学)
AtCoder Beginner Contest 226 E - Just one(dfs求连通块 组合数学)
80 0