Tetrahedron【几何】-2020杭电多校5

题意:

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6814

分析:

对该立体图形采用不同的方法求体积,设底面面积为 (S),有:

[a*b*c*frac{1}{6}=S*h*frac{1}{3} Longrightarrow h^2=frac{a^2b^2c^2}{4S^2} Longrightarrow frac{1}{h^2}=frac{4S^2}{a^2b^2c^2} ]

根据海伦公式(S=sqrt{p(p-a)(p-b)(p-c)}),其中 (a,b,c) 分别为三角形边长,(p=frac{a+b+c}{2})
代入:(x=sqrt{a^2+b^2},y=sqrt{a^2+c^2},z=sqrt{b^2+c^2}),最终化简可得:

[frac{1}{h^2}=frac{1}{a^2}+frac{1}{b^2}+frac{1}{c^2} ]

所以,

[E(frac{1}{h^2})=3E(frac{1}{a^2})=frac{3}{n}sum_{i=1}^{n}{frac{1}{i^2}} ]

也可以直接套用结论:https://wenku.baidu.com/view/b58ffe8132d4b14e852458fb770bf78a65293a0b.html

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int mod=998244353;
const int N=6e6+5;
ll sum[N];
ll power(ll a,ll b)
{
    ll res=1;
    a%=mod;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
void init()
{
    sum[0]=0;
    for(int i=1;i<N;i++)
        sum[i]=(sum[i-1]+power(1LL*i*i,mod-2))%mod;
}
int main()
{
    int T,n;
    init();
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        ll inv=power(n,mod-2);
        ll ans=3*inv%mod*sum[n]%mod;
        printf("%lld
",ans);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/1024-xzx/p/13442535.html