130716ACM-ICPC World Finals, 2012练习赛Curvy Little Bottles
2013-07-16 11:31
183 查看
#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的间隔。我只能说最简单的题都难成这样,后面咋做啊。。。主要还是太水啊。。。数学题,积分求体积,二分查找。
#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的间隔。我只能说最简单的题都难成这样,后面咋做啊。。。主要还是太水啊。。。数学题,积分求体积,二分查找。
相关文章推荐
- ACM/ICPC World Finals 2012 B Curvy Little Bottles
- Curvy Little Bottles——ACM icpc 2012 word final problem B
- 【ACM ICPC World Finals 2012】 Curvy Little Bottles (二分)
- 【CodeForces】gym-101205B Curvy Little Bottles (2012 ACM-ICPC World Finals B)
- ACM/ICPC World Finals 2012 D Fibonacci Words
- Gym 101205 (ACM-ICPC World Finals 2012)
- Abbott的复仇(Abbott's Revenge, ACM/ICPC World Finals 2000, UVa 816)<经典BFS>
- Puzzle,ACM/ICPC World Finals 1993,UVa227
- ACM - ICPC World Finals 2013 D Factors
- ACM/ICPC World Finals 2013 F Low Power
- 例题6-19 自组合(Self-Assembly, ACM/ICPC World Finals 2013, UVa 1572)
- 习题6-13 电子表格计算器(Spreadsheet Calculator, ACM/ICPC World Finals 1992, UVa215)
- Puzzle,ACM/ICPC World Finals 1993, UVa227
- ACM - ICPC World Finals 2013 F Low Power
- 算法竞赛入门经典-习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994,UVa232)
- 习题6-12 筛子难题(A Dicey Problem, ACM/ICPC World Finals 1999, UVa810)
- UVA 213 ACM-ICPC World Finals 1991 信息解码
- UVa806 习题6-8 空间结构(Spatial Structures,ACM/ICPC World Finals 1998)
- 【最大流问题 dinic算法】Internet Bandwidth, ACM/ICPC World Finals 2000, UVa820
- Repeating Decimals,ACM/ICPC World Finals 1990,UVa202