⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3244550_ce.c

📁 北大大牛代码 1240道题的原代码 超级权威
💻 C
字号:
#include <stdio.h>
#include <math.h>

double PAI = acos(-1.0);
double H, R, D1, h1, D2, h2, D, n;

double min(double a,double b)
{
	return a < b ? a : b;
}

int main()
{
	double S, h, minh1, minh2, _h1, _h2, F, G, v1, v2, v;
	
	scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&H,&R,&D1,&h1,&D2,&h2,&D,&n);
	S = PAI * R * R;
	v = n * n * n;
	if(D >= D1)
	{
		if(S * (n - h1 - h2) > v)
			h = S * (h1 + h2) / (S - n * n);
		else
			h = (h1 + h2 + v) / S;
	}
	else
	{
		if(D <= D2)
		{
			minh2 = (1 - n * n / S) * D * n / D2;
			if(minh2 <= h2)
				h = h1 + h2 + D * v / D2 / S;
			else
			{
				_h2 = S / (S - n * n) * h2;
				_h1 = (D * n - D2 * _h2) / D1;
				minh1 = (S - n * n) * _h1 / S;
				if(minh1 <= h1)
					h = h1 + h2 + (_h1 + _h2) * n * n / S;
				else
					h = S * (h1 + h2) / (S - n * n);
			}
		}
		else
		{
			v1 = S * h1;
			v2 = S * h2;
			_h1 = v1 / (S - n * n);
			_h2 = v2 / (S - n * n);
			F = _h1 * n * n * D1 + _h2 * n * n * D2;
			G = D * v;
			if(F <= G)
			{
				if(n >= _h1 + _h2)
					h = _h1 + _h2;
				else
					h = (v1 + v2 + v) / S;
			}
			else
			{
				if(n >= _h2)
				{
					F = _h2 * D2 * n * n + (n - _h2) * n * n * D1;
					if(F <= G)
						h = (v1 + v2 + v) / S;
					else
						h = h1 + _h2 + (G - _h2 * n * n * D2) / D1 / S;
				}
				else
					h = (v1 + v2 + v) / S;
			}
		}
	}
	h = min(h, H);
	printf("%.3lf\n",h);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -