130716ACM-ICPC World Finals, 2012练习赛Curvy Little Bottles

来源:互联网 发布:山东体育频道网络直播 编辑:程序博客网 时间:2024/05/16 01:49

#include<iostream>#include<cmath>#include<cstring>#include<string>#include<algorithm>#include<iomanip>#include<cstdio>using namespace std;double pi=acos(-1.0);double getV(double a[],int n,double xl,double xh)//积分算体积,利用for循环写出原函数。{    int i;    double ans=0.0,num,sum,tmp;    for(i=0; i<=n; ++i)    {        num=pow(xh,i+1);        sum=pow(xl,i+1);        tmp=i+1.0;        ans+=a[i]*(num-sum)/tmp;        //cout<<ans<<endl;    }    return pi*ans;}double getH(double a[],int n,double xl,double xm,double xh,double V)//二分求答案{    double id=(xh+xm)/2.0;    if(abs(V-getV(a,n,xl,id))>0.001)    {        if((getV(a,n,xl,id)-V)>0)        {            return getH(a,n,xl,xm,id,V);        }        else        {            return getH(a,n,xl,id,xh,V);        }    }    else    {        return id;    }}int main(){    int i,j,k,cas=0,n;    double t[30],num[30],low,high,tmp,flag;    while(scanf("%d",&n)!=EOF)    {        cas++;        for(i=0; i<=n; ++i)        {            scanf("%lf",&num[i]);        }        scanf("%lf%lf%lf",&low,&high,&tmp);        memset(t,0.0,sizeof(t));//初始化        for(i=0; i<=n; ++i)        {            for(j=0; j<=n; ++j)            {                t[i+j]+=num[i]*num[j];            }        }        flag=getV(t,2*n,low,high);        printf("Case %d: %.2lf\n",cas,flag);        if(flag<tmp)        {            printf("insufficient volume\n");//没有办法分出一个        }        else        {            flag=low;            for(i=0; i<8; ++i)            {                if(getV(t,2*n,low,high)<tmp)                {                    break;                }                low=getH(t,2*n,low,low,high,tmp);                if(i==0)//注意输出空格格式                {                    printf("%.2lf",low-flag);                }                else                {                    printf(" %.2lf",low-flag);                }            }            printf("\n");        }    }    return 0;}

做final的题实在是太受罪了,太难了,最后也只做出这一题。

题意很简单,就是给你个x的多项式,然后此多项式围绕x轴旋转一周形成一个瓶子,先问你瓶子的总体积V,再问每一定体积的x0的间隔。我只能说最简单的题都难成这样,后面咋做啊。。。主要还是太水啊。。。数学题,积分求体积,二分查找。


原创粉丝点击