牛客4579题:钓鱼概率比较问题
一、问题分析
这道题目要求我们比较两个人在不同钓鱼策略下t分钟内至少钓到一条鱼的概率。cc固定在一个格子钓鱼,而ss每分钟随机选择一个格子钓鱼。我们需要计算并比较这两种策略的成功概率。
二、解题思路
计算cc的概率:固定位置(x,y)钓到至少一条鱼的概率 = 1 - (1 - p[x][y])^t
计算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; }
四、代码解析
输入处理:读取矩阵大小、目标位置和时间参数
概率计算:读取概率矩阵并计算平均值
概率公式:
cc的概率:1 - (1 - p)^t
ss的概率:1 - (1 - avg_p)^t
结果比较:精确比较两种策略的概率并输出
五、数学原理
独立事件概率:每分钟钓鱼是独立事件
补集概率:P(至少一次) = 1 - P(全部失败)
几何分布:每次尝试成功的概率独立同分布
原创内容 转载请注明出处