51Nod - 1629 B君的圆锥

51Nod - 1629 B君的圆锥

B君要用一个表面积为S的圆锥将白山云包起来。

B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少。

注意圆锥的表面积包括底面和侧面。

Input

一行一个整数,表示表面积S。(1 <= S <= 10^9)

Output

一行一个实数,表示体积。

Input示例

8

Output示例

1.504506

题解:

    想使用三分法来解决,但是在9个test中只通过了第一个。(不知道出错在哪里了)

    后转 直接公式法解决。

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const double PI = 3.14159265358979; 

inline double fun(double x, const int &n){
	return PI*x*x*sqrt(n*n/(PI*PI*x*x) - 2*n/PI)/3;
}

double solve(double l, double r, const int &n){
	double tmp_l, tmp_r;
	while( (r-l) >= 1e-8 ){
		tmp_l = (r-l)/3.0 + l;
		tmp_r = (r-l)*2.0/3.0 + l;
		if( fun(tmp_r, n) > fun(tmp_l, n) ){
			l = tmp_l;
		}else{
			r = tmp_r;
		}
	}
	return fun(l + (r-l)/2.0, n);
}

int main(){

	int n;
	double l, r, ans;
	while(scanf("%d", &n) != EOF){
// 		l = 0.0000001;
// 		r = sqrt(n*1.0 / PI);
// 		ans = solve(l, r, n);
		ans = n*1.0*sqrt(n*1.0/(72.0*PI));
		printf("%.7f\n", ans );
	}
	return 0;
}

  

时间: 2024-10-12 18:36:19

51Nod - 1629 B君的圆锥的相关文章

1629 B君的圆锥

B君要用一个表面积为S的圆锥将白山云包起来. B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少. 注意圆锥的表面积包括底面和侧面. Input 一行一个整数,表示表面积S.(1 <= S <= 10^9) Output 一行一个实数,表示体积. Input示例 8 Output示例 1.504506 代码: 1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include

51nod1269 B君的圆锥

1629 B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 B君要用一个表面积为S的圆锥将白山云包起来. B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少. 注意圆锥的表面积包括底面和侧面. Input 一行一个整数,表示表面积S.(1 <= S <= 10^9) Output 一行一个实数,表示体积. Input示例 8 Output示例 1.504506 wwwwodddd (题目提供者) 拿到这道题的第一想法就是写

51nod B君的圆锥(数学)

题目链接: B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB B君要用一个表面积为S的圆锥将白山云包起来. B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少. 注意圆锥的表面积包括底面和侧面. Input 一行一个整数,表示表面积S.(1 <= S <= 10^9) Output 一行一个实数,表示体积. Input示例 8 Output示例 1.504506 题意: 思路: 找打圆锥体积与表面积的关系,再找出体积的最大值就好了,可以发现当圆锥的底面积PI*r^2=S

51629 B君的圆锥

1 #include <iostream> 2 #include <queue> 3 #include <stack> 4 #include <cstdio> 5 #include <vector> 6 #include <map> 7 #include <set> 8 #include <bitset> 9 #include <algorithm> 10 #include <cmath>

51NOD 1632 B君的连通(推公式)——算法马拉松16

传送门 B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接.A国是B国的敌国企图秘密发射导弹打击B国的交通线,现假设每条交通线都有50%的概率被炸毁,B国希望知道在被炸毁之后,剩下联通块的个数的期望是多少? Input 一个数n(2<=n<=100000) 接下来n-1行,每行两个数x,y表示一条交通线.(1<=x,y<=n) 数据保证其交通系统构成一棵树. Output 一行一个数,表示答案乘2^(n-1)后对1,000,000,007取模后的值

51NOD 算法马拉松15(脱欧专场) B君的游戏(博弈)

传送门 B君的游戏 wwwwodddd (命题人) 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 B君和L君要玩一个游戏.刚开始有n个正整数 ai . 双方轮流操作.每次操作,选一个正整数x,将其移除,再添加7个数字 x1,x2-x7 .要求对于 xi ,满足 0<= xi < x 且 x&xi=xi 注意0不能被选取,所以这个游戏一定会结束,而谁无法操作谁就失败. B君根据自己的经验,认为先手胜率高一点,所以B君是先手. B君想知道自己是否必胜. Input 第一

1616 最小集合 51NOD(辗转相处求最大公约数+STL)

1616 最小集合 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 A君有一个集合. 这个集合有个神奇的性质. 若X,Y属于该集合,那么X与Y的最大公因数也属于该集合. 但是他忘了这个集合中原先有哪些数字. 不过幸运的是,他记起了其中n个数字. 当然,或许会因为过度紧张,他记起来的数字可能会重复. 他想还原原先的集合. 他知道这是不可能的-- 现在他想知道的是,原先这个集合中至少存在多少数. 样例解释: 该集合中一定存在的是{1,2,3,4,6

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

51nod 1201 整数划分(dp)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 题解:显然是一道dp,不妨设dp[i][j]表示数字i分成j个一共有几种分法. 那么转移方程式为: dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] 表示将i - 1划分为j个数,然后j个数都+1 还是不重复,将i - 1划分为j - 1个数,然后j - 1个数都+1,再加上1这个数. 然后就是j的范围要知道1+2+