牛客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(全部失败)
几何分布:每次尝试成功的概率独立同分布
原创内容 转载请注明出处
