poj 3440 Coin Toss(概率)

这道题目是POJ上的3440题,涉及概率和几何问题。内容是计算在n*m的网格中,直径为c的硬币中心位于格子内或边上时,覆盖1到4个格子的概率。解答方法是通过计算不同覆盖情况下的圆心可分布面积,然后除以总面积得出概率。
摘要由CSDN通过智能技术生成

http://poj.org/problem?id=3440


大致题意:给出一个n*m的格子,每个格子的边长为t,随意抛一枚硬币并保证硬币的圆心在格子里或格子边上,硬币的直径为c,求硬币覆盖格子的个数的概率。


思路:高中的概率题,ms是几何概型。根据分别覆盖1,2,3,4个格子时圆心可分部的面积比上总面积就是答案。


#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#define LL long long
#define _LL __int64
#define eps 1e-8
#define PI acos(-1.0)
using namespace std;

const int INF = 0x3f3f3f3f;
const int maxn = 10;

double ans[6];

int main()
{
	int test;
	scanf("%d",&test);
	for(int item = 1; item <= test; item++)
	{
		double n,m,t,c;
		scanf("%lf %lf %lf %lf",&n,&m,&t,&c);
		
		//WA ,把fm定义成了int型
		double fm = n*m*t*t;

		ans[1] = (t-c/2)*(t-c/2)*4 + (t-c)*(t-c/2)*(2*m+2*n-8) + (t-c)*(t-c)*(n-2)*(m-2);

		ans[3] = (c*c - PI*(c/2)*(c/2) )*(n-1)*(m-1);

		ans[4] = PI*(c/2)*(c/2)*(n-1)*(m-1);

		ans[2] = fm - ans[1] - ans[3] - ans[4];

		printf("Case %d:\n",item);
		for(int i = 1; i <= 4; i++)
		{
			if(i == 1)
				printf("Probability of covering 1 tile  = %.4f%%\n",ans[1]*100.0/fm);
			else
				printf("Probability of covering %d tiles = %.4f%%\n",i,ans[i]*100.0/fm);
		}
		printf("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值