当前位置:首页 > 牛客题解 > 牛客4579题:钓鱼概率比较问题

牛客4579题:钓鱼概率比较问题

2天前牛客题解51

截图未命名.jpg 牛客4579题:钓鱼概率比较问题 概率计算 C++实现 数学问题 模拟算法 牛客题解 第1张

一、问题分析

这道题目要求我们比较两个人在不同钓鱼策略下t分钟内至少钓到一条鱼的概率。cc固定在一个格子钓鱼,而ss每分钟随机选择一个格子钓鱼。我们需要计算并比较这两种策略的成功概率。

二、解题思路

  1. 计算cc的概率:固定位置(x,y)钓到至少一条鱼的概率 = 1 - (1 - p[x][y])^t

  2. 计算ss的概率:每分钟随机选择格子,钓到至少一条鱼的概率 = 1 - ∏(1 - p_avg)^t,其中p_avg是所有格子的平均概率

三、完整代码

#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. 概率公式‌:

    • cc的概率:1 - (1 - p)^t

    • ss的概率:1 - (1 - avg_p)^t

  4. 结果比较‌:精确比较两种策略的概率并输出

五、数学原理

  1. 独立事件概率:每分钟钓鱼是独立事件

  2. 补集概率:P(至少一次) = 1 - P(全部失败)

  3. 几何分布:每次尝试成功的概率独立同分布


原创内容 转载请注明出处

分享给朋友:

发表评论

访客

看不清,换一张

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