HDOJ2009暑期集训内部赛(2)-Asia Regional Contest Aizu 2008

http://acm.hdu.edu.cn/search.php?field=problem&key=HDOJ2009暑期集训内部赛(2)-Asia Regional Contest Aizu 2008&source=1

 


2908 Grey Area ---------ac. 其实这是简单的几何题,也很快写出了代码,但这题过的不容易,卡就卡在这题是Spacial Judge 因为以前没碰到过不知道这是对数据格式要求有放宽的,比如要输出一个小数,你可以在精度范围内输出任意几位,比如1.000 1.00000是一样的 都无所谓。比赛时一直纠结如何让输出和给出Output 一样的,所以很久才过。


2909 Expected Allowance-------- 赛后ac. 其实是简单的母函数题,但那时先是被2908题折磨,二是母函数写过实在太久了,小问题没处理好答案出不来。赛后进行了母函数的复习总结。具体如下:


http://acm.hdu.edu.cn/diy/contest_show.php?cid=2440

母函数diy

#include<iostream>

using namespace std;

int c1[100000],c2[100000];

int main()

{

    int i,j,k,n,m,p;

    double sum;

    while(scanf("%d%d%d",&n,&m,&p)!=EOF)

    {

        if(n==0&&m==0&&p==0)

            break;

        sum=0;

        for(i=1;i<=m;i++)

        {

            c1[i]=1;

            c2[i]=0;

        }

        for(i=1;i<n;i++)//注意括号里的数的范围

        {

            for(j=1;j<=m*i;j++)//第一个括号里的数,注意最后j<= 该括号内能过到达的最大的次数

                for(k=1;k<=m;k++)//后一个括号里的数,注意最后k<= 该括号内能过到达的最大的次数

 

                {

                    c2[j+k]+=c1[j]; //c2[]用来临时储存第一个括号内的情况 

                }

            for(j=1;j<=m*(i+1);j++)//一次相乘后第一个括号里的数注意最后j<= 该括号内能过到达的最大的次数

 

            {

                c1[j]=c2[j];

                c2[j]=0;

            }

        }

        for(i=n;i<=n*m;i++)

        {

            if(i>p)

                sum+=(double)c1[i]*(i-p);

            else

                sum+=(double)c1[i];

        }

        for(i=1;i<=n;i++)

            sum/=m;

        printf("%.8lf/n",sum);

    }

    return 0;

}

Hdoj——2909

 

你可能感兴趣的:(HDOJ2009暑期集训内部赛(2)-Asia Regional Contest Aizu 2008)