hdu 4762 Cut the Cake概率公式

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4762

 

题目大意:一个圆形蛋糕,现在要分成M个相同的扇形,有n个草莓,求n个草莓都在同一个扇形上的概率。

 

算法思路:n个草莓在圆形上有一个最左边的,为了好理解,先把假设草莓有1-n的不同编号。  现在从n个草莓中选出一个编号A的放在最左边(这个最左边可以随便放),得到C(n,1)*1.然后把其余的n-1草莓不分先后的放在A的右边角大小为(360)/m的扇形区域内就可以了。 所以概率为 n/(m^(n-1));

由于20^20超 long long了,所以要用高精度。而且要约分。

 

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int GCD(int a,int b)
{
    if(a < b) swap(a,b);
    if(a % b == 0) return b;
    return  GCD(b,a%b);
}

int ans[30],cnt;

void BigIntergerMul(int n)
{
    int b[3],pv=0;

    int temp = n;
    while(temp)
    {
        b[++pv] = temp%10;
        temp /= 10;
    }

    if(cnt == 0)
    {
        for(int i=1; i<=pv; i++)
        {
            ans[i] = b[i];
        }
        cnt = pv;
    }
    else
    {
        int c[30],cnt1 = 0;
        memset(c,0,sizeof(c));

        for(int i=1; i<=pv; i++)
        {
            for(int j=1; j<=cnt; j++)
            {
                int mul = b[i]*ans[j];
                int wei = j + i - 1;

                c[wei] += mul;

                while(c[wei] >= 10){
                    c[wei+1] += c[wei]/10;
                    c[wei] = c[wei]%10;
                    wei++;
                }
                cnt1 = max(wei,cnt1);
            }
        }
        cnt = max(cnt,cnt1);
        for(int i=1; i<=cnt; i++)
        {
            ans[i] = c[i];
        }
    }

}



int main()
{
    //freopen("E:\\acm\\input.txt","r",stdin);
    int T;
    cin>>T;
    while(T--)
    {
        int M,N;
        cin>>M>>N;
        cnt = 0;
        memset(ansff,0,sizeof(ans));
        int fenzi = N;
        for(int i=1; i<N; i++)
        {
            int gcd = GCD(M,fenzi);  //先分子与M约分,在用高精度相乘,这样不用最后两个高精度来约分。
            fenzi = fenzi/gcd;
            BigIntergerMul(M/gcd);
        }
        printf("%d/",fenzi);
        for(int i=cnt; i>=1; i--)
        {
            printf("%d",ans[i]);
        }
        printf("\n");
    }
}
View Code

 

 

posted @ 2013-09-28 21:51  等待最好的两个人  阅读(404)  评论(0编辑  收藏  举报