POJ 3440 Coin Toss

高中概率的几何概型,这也叫作题,不过输出真的很坑。

题目大意:

n*m个边长为t的正方形组成的矩形。往矩形上抛一个直径为c的硬币,问覆盖1,2,3,4个矩形的概率为多少?

解题思路:

计算出覆盖1,2,3,4个矩形时硬币圆心可以在的位置区域。就能求出概率了~

下面是代码:

#include <set>
#include <map>
#include <queue>
#include <math.h>
#include <vector>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>

#define eps 1e-6
#define pi acos(-1.0)
#define inf 107374182
#define inf64 1152921504606846976
#define lc l,m,tr<<1
#define rc m + 1,r,tr<<1|1
#define iabs(x)  ((x) > 0 ? (x) : -(x))
#define clear1(A, X, SIZE) memset(A, X, sizeof(A[0]) * (SIZE))
#define clearall(A, X) memset(A, X, sizeof(A))
#define memcopy1(A , X, SIZE) memcpy(A , X ,sizeof(X[0])*(SIZE))
#define memcopyall(A, X) memcpy(A , X ,sizeof(X))
#define max( x, y )  ( ((x) > (y)) ? (x) : (y) )
#define min( x, y )  ( ((x) < (y)) ? (x) : (y) )

using namespace std;

int main()
{
    int T,case1=1;
    double n,m,t,c,ans[4];
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lf%lf%lf%lf",&n,&m,&t,&c);
        ans[0]=(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[2] = (c*c - pi*(c/2)*(c/2) )*(n-1)*(m-1);
        ans[3] = pi*(c/2)*(c/2)*(n-1)*(m-1);
        ans[1] = n*m*t*t - ans[0] - ans[2] - ans[3];
        printf("Case %d:\n",case1++);
        printf("Probability of covering 1 tile  = %.4f%%\n",ans[0]*100.0/(n*m*t*t));
        for(int i=1;i<4;i++)
        {
            printf("Probability of covering %d tiles = %.4f%%\n",i+1,ans[i]*100.0/(n*m*t*t));
        }
        puts("");
    }
    return 0;
}

POJ 3440 Coin Toss

时间: 2024-10-11 16:46:01

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&g

[ACM] POJ 3440 Coin Toss (几何概率)

Coin Toss Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3019   Accepted: 817 Description In a popular carnival game, a coin is tossed onto a table with an area that is covered with square tiles in a grid. The prizes are determined by t

POJ 3440 Coin Toss(求概率)

题目链接 题意 :把硬币往棋盘上扔,分别求出硬币占1,2,3,4个格子的时候的概率. 思路 : 求出公式输出,不过要注意输出格式,我还因为输入的时候用了int类型错了好几次..... 1 //3440 2 #include <stdio.h> 3 #include <string.h> 4 #include <iostream> 5 #include <math.h> 6 #define PI acos(-1.0) 7 8 using namespace s

【POJ 3440】 Coin Toss(概率公式)

[POJ 3440] Coin Toss(概率公式) Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3591   Accepted: 957 Description In a popular carnival game, a coin is tossed onto a table with an area that is covered with square tiles in a grid. The prizes ar

poj 3440 (概率)

链接:poj 3440 题意:在m*n的网格盘上,每个格子大小都是t*t, 现将一个直径为c的硬币扔在向网格盘上, 求硬币覆盖1,2,3,4个格的概率分别为多少 注:圆心只可能落在在网格盘上 分析:问题可转化为求覆盖1,2,3,4个格硬币圆心活动的面积 分别推出公式即可求解 注意输出格式... #include<stdio.h> #include<math.h> #define PI 4.0*atan(1.0) int main() { int T,k; double m,n,t,

VMware coding Challenge: Coin Toss Betting

1 static int CoinTossEndAmount(int betAmount, String coinTossResults) { 2 if (betAmount <=0 || coinTossResults.length() == 0) return betAmount; 3 long Amount = betAmount; 4 long onebet = 1; 5 for (int i=0; i<coinTossResults.length(); i++) { 6 if (co

UVa 10328 Coin Toss(Java大数+递推)

https://vjudge.net/problem/UVA-10328 题意: 有H和T两个字符,现在要排成n位的字符串,求至少有k个字符连续的方案数. 思路:这道题目和ZOJ3747是差不多的,具体做法可以参考另一篇博客http://www.cnblogs.com/zyb993963526/p/7203833.html 但是这道题目的话是要用大数来做的,c++感觉不太好写,就学了下java的做法. 1 import java.math.BigInteger; 2 import java.ut

poj 3440 java 吐槽

非常蛋疼的一道题,题目本身很简单,但是最后的输出结果太让人恶心了, 其中有三点需要注意的: 1.title单复数问题 2.title单复数后的空格数不一样 3.Case之间要有空行,但是最后个Case后不能有空行,这点太恶心了,开始一直没找着...直接循环输出回车,一直报错PE, 最后是代码:方便伸手党: import java.text.DecimalFormat; import java.util.Scanner; public class Main{ public static void

uva 10328 - Coin Toss 投硬币(dp递推,大数)

题意:抛出n次硬币(有顺序),求至少k个以上的连续正面的情况的种数. 思路:转换成求抛n个硬币,至多k-1个连续的情况种数,用所有可能出现的情况种数减去至多k-1个的情况,就得到答案了.此题涉及大数加减. 分析: (1)假设n=k,那么只有一种情况. (2)假设n=k+1,那么有3种情况,包含k个的两种,k+1个的一种. (3)假设k=1,那么只有无正面这一种的情况不能被考虑,其他都能算,那么就是(1<<n)-1种.(n个硬币有2^n种结果) (4)其他情况考虑递推.先把问题的规模降低,最小就