poj 3737 UmBasketella(三分+求导)

原创 2012年03月26日 00:09:53

【题目大意】:给出一个圆锥体的表面积,求最大的体积,并输出其半径和高。


【解题思路】:下午在比赛的时候是直接求导推的公式做的。

  晚上回来想想其实三分极值可以做,但是一直wa,不知道为什么。

                          我原来三分是这么写的 mid1=(low+high)/2.0; mid2=(mid+high)/2.0; 但是一直过不了,后来改成mid1=low+(high-low)/3.0; mid2=high-(high-low)/3.0;就过了~~不知道什么原因。留着思考....


【代码】:

//三分
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <string>
#include <cctype>
#include <map>
#include <iomanip>
                   
using namespace std;
                   
#define eps 1e-10
#define pi acos(-1.0)
#define inf 1<<30
#define linf 1LL<<60
#define pb push_back
#define lc(x) (x << 1)
#define rc(x) (x << 1 | 1)
#define lowbit(x) (x & (-x))
#define ll long long

double s;

double solve_v(double r){
    return  pi*r*r*sqrt(pow((s-pi*r*r)/(pi*r),2)-r*r)/3;
}

int main(){
	while (~scanf("%lf",&s)){
		double v=0.0;
		double low=0,high=sqrt(s/pi);
		while (low+eps<high){
			double mid1=low+(high-low)/3.0;
			double mid2=high-(high-low)/3.0;
			double v1,v2;
            v1=solve_v(mid1);
            v2=solve_v(mid2);
            if (v1>v2) v=v1,high=mid2;
			else v=v2,low=mid1;
		}
	    double h=sqrt(pow((s-pi*high*high)/(pi*high),2)-high*high);
	    printf("%.2f\n%.2f\n%.2f\n", v,h,high);
    
    }
	return 0;
}
//求导
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <string>
#include <cctype>
#include <map>
#include <iomanip>
                   
using namespace std;
                   
#define eps 1e-8
#define pi acos(-1.0)
#define inf 1<<30
#define linf 1LL<<60
#define pb push_back
#define lc(x) (x << 1)
#define rc(x) (x << 1 | 1)
#define lowbit(x) (x & (-x))
#define ll long long

double s,r,h,v,l;

void solve(){
    r=sqrt(s/(4*pi));
    l=s/(pi*r)-r;
    h=sqrt(l*l-r*r);
    v=1.0/3*pi*r*r*h;
}

int main() {
    while (~scanf("%lf",&s)){
        solve(); 
        printf ("%.2f\n",v);
        printf ("%.2f\n",h);
        printf ("%.2f\n",r);
    } 
    return 0;
}



POJ 3737 UmBasketella(三分)

UmBasketella Description In recent days, people always design new things with multifunction. For...

poj 3737 UmBasketella(数学推导||三分)

题目:http://poj.org/problem?id=3737 我是想练一练三分的,听说这题能用上,但是我做完了也没把三分派上用场(第一种方法)。数学分析一下就能得出结果啊。令圆锥的底面半径...

POJ 3737 UmBasketella 三分搜索

UmBasketella Time Limit: 1000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu SubmitStatus...

poj 3737 UmBasketella(三分)

我们都知道 二分查找 适用于单调函数中逼近求解某点的值。 如果遇到凸性或凹形函数时,可以用三分查找求那个凸点或凹点(即最值)。 还有通过这道题知道了,输出doubleG++用%lf会wa,一...
  • CillyB
  • CillyB
  • 2016年10月30日 19:42
  • 157

POJ 3737 UmBasketella

Description In recent days, people always design new things with multifunction. For instance, you...

POJ 3737 UmBasketella.

Description In recent days, people always design new things with multifunction. For instance, y...

[POJ3737]UmBasketella

In recent days, people always design new things with multifunction. For instance, you can not only u...
  • UISG103
  • UISG103
  • 2017年07月15日 08:47
  • 75

【原创】【假分治】UmBasketella POJ 3737

UmBasketella POJ 3737题目In recent days, people always design new things with multifunction. For insta...

洛谷P3382:(三分/求导+二分)

【模板】三分法 题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减。试求出x的值。 输入输出格式 输入格式: 第一行一次包含一个正整数N和两...
  • KsCla
  • KsCla
  • 2016年12月24日 14:55
  • 628

UmBasketella(三分算法解决单峰问题)

Question In recent days, people always design new things with multifunction. For instance, you can...
  • Damon_C
  • Damon_C
  • 2017年08月02日 14:15
  • 87
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 3737 UmBasketella(三分+求导)
举报原因:
原因补充:

(最多只允许输入30个字)