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\n",ans);
    }
    return 0;
}

posted @ 2020-08-05 20:39  xzx9  阅读(169)  评论(0编辑  收藏  举报