当前位置:首页 > 牛客 > 牛客4579题:钓鱼比赛——概率计算与比较

牛客4579题:钓鱼比赛——概率计算与比较

2天前

牛客4579题:钓鱼比赛——概率计算与比较 牛客题解 概率计算 C++ 矩阵 第1张

一、题目解读

牛客4579题要求解决一个基于网格的概率计算问题:给定一个n×m的矩阵,每个元素表示对应位置钓到鱼的概率。用户需根据输入的坐标(x,y)和尝试次数t,比较该位置钓到鱼的累积概率与全区域平均概率的累积概率,并输出结果("equal"、"cc"或"ss")。题目强调坐标从1开始,需处理浮点数精度问题。

二、解题思路

1. 数据读取与预处理:接收n、m、x、y、t,构建二维概率矩阵并计算总和,避免重复计算。

2. 平均概率计算:总概率除以网格总数,得到全局平均概率。

3. 目标位置概率:利用公式 1 - (1 - p)^t 计算单点累积概率,减少浮点数误差。

4. 比较与输出:通过高精度比较(abs() < 1e-6)判断概率差异,输出对应结果及概率值。

三、解题步骤

1. 输入解析:依次读取n、m、x、y、t,初始化矩阵。

2. 矩阵构建与总概率统计:双层循环读取元素,同步累加 total。

3. 核心计算:

○ 计算平均概率 avg_p = total / (n * m)。

○ 计算目标位置概率 cc_p = grid[x-1][y-1](需转换坐标)。

○ 分别计算累积概率 cc_prob 和 ss_prob 并比较。

4. 输出优化:使用 fixed << setprecision(2) 确保概率输出格式固定小数点2位。

四、代码与注释

#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
using namespace std;

void solve() {
    int n, m, x, y, t;
    while (cin >> n >> m >> x >> y >> t) {
        vector<vector<double>> grid(n, vector<double>(m));
        double total = 0.0;
        
        // 读取概率矩阵并计算总和
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                cin >> grid[i][j];
                total += grid[i][j];
            }
        }
        
        // 计算平均概率
        double avg_p = total / (n * m);
        double cc_p = grid[x-1][y-1]; // 题目中坐标从1开始
        
        // 计算至少钓到一条鱼的概率
        double cc_prob = 1 - pow(1 - cc_p, t);
        double ss_prob = 1 - pow(1 - avg_p, t);
        
        // 比较概率并输出结果
        cout << fixed << setprecision(2);
        if (abs(cc_prob - ss_prob) < 1e-6) {
            cout << "equal" << endl << cc_prob << endl;
        } else if (cc_prob > ss_prob) {
            cout << "cc" << endl << cc_prob << endl;
        } else {
            cout << "ss" << endl << ss_prob << endl;
        }
    }
}

int main() {
    solve();
    return 0;
}

五、总结

该解法通过精准的累积概率公式与高精度比较,高效解决了网格概率对比问题。关键点在于:

1. 坐标转换适配题目要求;

2. 避免多次计算总和提升效率;

3. 利用 pow() 简化累积概率计算;

4. 浮点数比较采用安全阈值。

可进一步优化输入流的效率或概率计算的数学简化。



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

一:重新解读题目泰波那契数列是一个充满数学趣味的递推序列:从第3项开始,每个数均为前三个数的和(即Tₙ₊₃ = Tₙ + Tₙ₊₁ + Tₙ₊₂)。当给定整数n时,需要高效计算出第n项的值。面对此类递...

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

牛客DP41精讲:当背包必须装满时,你的状态转移方程该如何调整?

题目重解我们面对一个经典背包问题的变体:给定n个物品,每个物品有重量w和价值v,背包容量为V。需要回答两个问题:1) 普通情况下能获得的最大价值;2) 必须恰好装满背包时的最大价值(若无法装满则输出0...

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

题目重解想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。解题...

力扣144:递归之美 轻松掌握二叉树前序遍历

力扣144:递归之美 轻松掌握二叉树前序遍历

题目解读二叉树的前序遍历是一种基础但重要的树遍历方式,其遍历顺序为:先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。给定一个二叉树的根节点,我们需要按照这个顺序访问所有节点,并将它们...

牛客4580题解:动态规划求解网格路径概率问题(C++代码实现)

牛客4580题解:动态规划求解网格路径概率问题(C++代码实现)

一、题目解读牛客4580题要求在一个n×m的网格中计算从起点(1,1)到终点(n,m)的概率。网格中存在障碍物(标记为坏点),路径只能向右或向下移动。到达终点时,若处于边界位置,概率转移规则不同:下边...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。