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

深度学习
• 阅读 2

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

一、题目解读

牛客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 并比较。

  1. 输出优化:使用 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. 浮点数比较采用安全阈值。

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

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MXNET:丢弃法
除了前面介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)来应对过拟合问题。方法与原理为了确保测试模型的确定性,丢弃法的使用只发生在训练模型时,并非测试模型时。当神经网络中的某一层使用丢弃法时,该层的神经元将有一定概率被丢弃掉。设丢弃概率为$p$。具体来说,该层任一神经元在应用激活函数后,有$p$的概率自乘0,有
小万哥 小万哥
1年前
NumPy 二项分布生成与 Seaborn 可视化技巧
二项分布是描述固定次数独立试验中成功次数的概率分布,常用于分析二元结果的事件,如抛硬币。分布由参数n(试验次数)、p(单次成功概率)和k(成功次数)定义。概率质量函数P(k)C(n,k)p^k(1p)^(nk)。NumPy的random.binomial()可生成二项分布数据,Seaborn可用于可视化。当n大且p接近0.5时,二项分布近似正态分布。练习包括模拟不同条件下的二项分布和应用到考试场景。
小万哥 小万哥
1年前
多项分布模拟及 Seaborn 可视化教程
多项分布是二项分布的推广,描述了在n次试验中k种不同事件出现次数的概率分布。参数包括试验次数n、结果概率列表pvals(和为1)和输出形状size。PMF公式展示了各结果出现次数的概率。NumPy的random.multinomial()可生成多项分布数据。练习包括模拟掷骰子和抽奖活动。解决方案提供了相关图表绘制代码。关注公众号“LetusCoding”获取更多内容。
贾蔷 贾蔷
1个月前
牛客12576题全解析:动态规划+质因数分解解决跳跃问题
一、题目解读牛客12576题是一道经典的算法题,要求给定起点N和终点M,求解从N到M的最少跳跃次数。题目考察的核心在于路径优化与动态规划思想,需结合数论中的质因数分解技巧,通过合理设计算法降低时间复杂度,避免暴力枚举的指数级耗时。二、解题思路采用“动态规划
深度学习 深度学习
1个月前
【CSP-S 2019】括号树(洛谷P5658):栈+DFS
一、题目解读括号树问题(洛谷P5658)要求处理一个由括号序列转化的树结构:每个节点表示一个括号,'('为子节点,')'为父节点。题目给定一棵n个节点的树,需计算每个节点的深度(括号层数),并输出所有节点深度与节点编号乘积的异或和。核心在于将括号序列转化为
贾蔷 贾蔷
1个月前
牛客13279题解:利用递归与深度优先搜索计算树的最大高度(附完整代码)
一、题目解读牛客13279题要求计算给定树的最大高度。题目输入一棵以邻接表形式表示的树(节点从0开始编号),需要输出从根节点到最深叶节点的最长路径长度。树的结构由n个节点和n1条边构成,保证为连通无环图。理解题目核心在于准确获取树的拓扑关系,并设计算法遍历
深度学习 深度学习
1个月前
2024蓝桥杯省赛B组前缀总分(洛谷P12124)解题思路与代码详解
一、题目解读2024年蓝桥杯省B组题目“前缀总分”(对应洛谷P12124)要求计算给定字符串集合中,所有前缀的最长公共前缀(LCP)的总分,并找出通过移动字符位置后可能获得的最大总分。题目考察字符串处理与动态规划能力,需高效计算LCP并优化得分策略。二、解
贾蔷 贾蔷
3星期前
洛谷1220题解:动态规划与区间DP优化解法
一、题目解读1220题要求计算在n个位置放置灯的情况下,通过关闭连续区间灯并移动至区间端点,使得总耗电量最小。需考虑灯的功率与位置差异,设计高效的求解最优策略。二、解题思路1.:定义状态dp:使用sum存储灯功率前缀和,简化区间电量计算。3.核心:○向左
贾蔷 贾蔷
2星期前
洛谷P1102题解:利用哈希表优化的数对统计 C++代码解析
一、题目解读P1102题要求处理一组整数与常数C,统计数组中是否存在元素A与B满足ABC。用户需输出满足条件的数对数量。题目关键在于快速判断是否存在互补元素,时间复杂度需优化以避免暴力遍历。二、解题思路采用(unorderedmap)实现高效统计。首先遍
贾蔷 贾蔷
6天前
【力扣LCR42题解析】套圈游戏:用距离平方优化算法解题
一、题目解读LCR42题“圆圈游戏”要求计算给定玩具集合中,能被套圈覆盖的玩具数量。每个玩具和套圈均由坐标及半径定义,需判断玩具是否在套圈覆盖范围内。题目核心在于高效计算点与圆的位置关系,并统计符合条件的结果。二、解题思路采用“半径预筛选距离平方判定”策