首页 > 代码库 > poj 3440 Coin Toss(概率)
poj 3440 Coin Toss(概率)
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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。