NC207502. 有趣的圆柱体
描述
输入描述
第一行输入一个正整数,代表数据的组数。接下来输入一个整数。接下来行,每行输入3个数,代表棱柱上一个顶点的坐标。
输出描述
输出一个浮点数,表示圆柱体的体积,结果保留六位小数,最大浮点误差为。
示例1
输入:
1 6 1.000000000 0.000000000 0.000000000 0.500000000 0.866025404 0.000000000 -0.500000000 0.866025404 0.000000000 -1.000000000 0.000000000 0.000000000 -0.500000000 -0.866025404 0.000000000 0.500000000 -0.866025404 0.000000000 1.000000000 0.000000000 3.000000000 0.500000000 0.866025404 3.000000000 -0.500000000 0.866025404 3.000000000 -1.000000000 0.000000000 3.000000000 -0.500000000 -0.866025404 3.000000000 0.500000000 -0.866025404 3.000000000
输出:
9.424778
C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 488K, 提交时间: 2020-06-06 14:39:24
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #define pi 3.1415926535 using namespace std; double a[60]; double q,w,r; double ll(double x,double y,double z){ return sqrt((x-q)*(x-q)+(y-w)*(y-w)+(r-z)*(r-z)); } int main(){ int t;cin>>t; while(t--){ int n;cin>>n; cin>>q>>w>>r; for(int i=1;i<=2*n-1;i++){ double x,y,z; // scanf("%f %f %f",&x,&y,&z); cin>>x>>y>>z; a[i]=ll(x,y,z); } sort(a+1,a+2*n); a[n-1]=a[n-1]/2; printf("%.6f\n",a[n-1]*a[n-1]*pi*a[n]); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 8ms, 内存消耗: 468K, 提交时间: 2020-06-08 10:34:38
#include<bits/stdc++.h> using namespace std; #define _USE_MATH_DEFINES double x[65],y[65],z[65],d[65]; int t,n; double pi=M_PI; double cul(double d,double h) { return pi*h*d*d/4; } double f(int i) { return sqrt(x[i]*x[i]+y[i]*y[i]+z[i]*z[i]); } int main() { cin>>t; while(t--) { cin>>n; cin>>x[0]>>y[0]>>z[0]; for(int i=1;i<2*n;i++) { cin>>x[i]>>y[i]>>z[i]; x[i]-=x[0]; y[i]-=y[0]; z[i]-=z[0]; d[i]=f(i); } sort(d+1,d+2*n); printf("%.6f\n",cul(d[n-1],d[n])); } return 0; }