列表

详情


NC214584. 母牛上柱

描述

母牛刚来到广东柱子大学时,就被学校的柱子深深地迷住。于是,母牛立下了flag,要在大学4年爬遍学校的柱子。同时,每个柱子顶部都有一个最佳的俯瞰学校的观测点。母牛在爬柱子时,会从柱子底爬到柱子顶的最佳观测点。为了尽快爬完大学所有的柱子,母牛想知道他爬一根柱子最短路径。

为方便计算,我们将柱子简化成如上图所示的圆柱。S点为母牛在柱子底部所在的位置,α为OS与平面XOZ的夹角;T为柱子顶部的最佳观测点的位置,β为O'T与平面XOZ的夹角;R为圆柱的半径,H为圆柱的高。

圆周率π取3.1415926535

输入描述

第一行包含一个整数T(T<=100),表示输入样例数。

接下来T行每行包含α,β,R,H四个整数。

(α,β的单位为度,0 < α,β < 360,0 < R,H < 1000)

输出描述

输出共T行,每行为母牛从S点爬到T点的最短路径的平方,结果保留两位小数。

示例1

输入:

2
0 0 50 50
0 90 50 50

输出:

2500.00
8668.50

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang11) 解法, 执行用时: 1ms, 内存消耗: 232K, 提交时间: 2020-12-06 15:09:11

#include<stdio.h>
#include<math.h>
int main(){
	int T,a,b,r,h,c;
	double d,pi=3.1415926535;
	scanf("%d",&T);
	while(T--){
		scanf("%d %d %d %d",&a,&b,&r,&h);
		c=abs(a-b);
		if(c>180)c=360-c;
		d=2*r*pi*c/360.0;
		printf("%.2lf\n",d*d+h*h);
	}
	return 0;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 300K, 提交时间: 2021-10-14 13:01:54

#include<bits/stdc++.h>
using namespace std;
int t;
double a,b,r,h,s;
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>a>>b>>r>>h;
		s=min(abs(a-b),abs(360-abs(a-b)))*3.1415926535*2*r/360;
		printf("%0.2lf\n",s*s+h*h);
	}
	return 0;
}

Python3(3.9) 解法, 执行用时: 15ms, 内存消耗: 2812K, 提交时间: 2021-02-25 13:21:51

T=int(input())
while T:
    l=list(map(int,input().split()))
    a=l[0]
    b=l[1]
    r=l[2]
    h=l[3]
    t1=abs(a-b)
    t2=360-t1
    print("%.2f" % (h**2+(min(t1,t2)/360*2*3.1415926535*r)**2))
    T-=1

上一题