HDU6814 Le 5ème tétraèdre de l'école d'énergie électrique de Hangzhou (en fait, il n'y a que deux formules, version super simple)

Titre:

Les trois faces sont des pyramides triangulaires à angle droit, et les longueurs des trois bords sont a, b, ca, b, cun ,b ,c (dans[1, n] [1, n][ 1 ,n ] selon votre choix). Soit la distance du sommet au bashhh, 求1 h 2 \ frac {1} {h ^ 2}h21Attentes.

Une analyse:

Je pense que l'explication officielle de la dérivation est trop gênante, j'ai donc écrit ce blog et parlé de ma propre dérivation.

Puisque les trois angles de la pyramide triangulaire sont tous des angles droits, nous considérons directement le sommet comme l'origine de la coordonnée, et les trois arêtes comme l'axe des trois directions, hhLa solution de h est convertie en distance du point à la surface.
Insérez la description de l'image ici

Le milieu du système de coordonnées rectangulaires tridimensionnel (x 0, y 0, z 0) (x_0, y_0, z_0)( x0,et0,de0)到 面A x + B y + C z + D = 0 Ax + Par + Cz + D = 0Un x+B y+C z+=0 formule de distance:
h = ∣ A x 0 + B y 0 + C z 0 + D ∣ A 2 + B 2 + C 2 h = \ frac {| Ax_0 + By_0 + Cz_0 + D |} {\ sqrt {A ^ 2 + B ^ 2 + C ^ 2}}h=UNE2+B2+C2 A x0+B y0+C z0+D |
Le fond est une passe (0, 0, a), (b, 0, 0), (0, c, 0) (0,0, a), (b, 0,0), (0, c, 0 )( 0 ,0 ,a ) ,( b ,0 ,0 ) ,( 0 ,c ,0 ) , la formule de la surface n'a pas besoin d'être calculée
ac x + ab y + bc z - abc = 0 ac \ x + ab \ y + bc \ z-abc = 0un c x +un b y +b c z -a b c=Le
sommet 0 est l'origine de la coordonnée, et la formule
h = abca 2 b 2 + b 2 c 2 + a 2 c 2 h = \ frac {abc} {a ^ 2b ^ 2 + b ^ 2c ^ 2 + a ^ 2c ^ 2}h=une2 b2+b2 c2+une2 c2un b c
那么
1 h 2 = 1 a 2 + 1 b 2 + 1 c 2 \ frac {1} {h ^ 2} = \ frac {1} {a ^ 2} + \ frac {1} {b ^ 2} + \ frac {1} {c ^ 2}h21=une21+b21+c21
a, b, ca, b, c un ,b ,c等价 ,E (1 h 2) = 3 × E (1 a 2) E (\ frac {1} {h ^ 2}) = 3 \ fois E (\ frac {1} {a ^ 2})E (h21)=3×E (une21)

Trouvez linéairement l'élément inverse inférieur, puis additionnez les préfixes. N'oubliez pas de vous attendre à diviser par la probabilité dans la sortie finale , pre [n] × inv [n]% mod pre [n] \ times inv [n] \% modp r e [ n ]×i n v [ n ] % m o d

Code AC:

#include<cstdio>
#include <cmath>
#define pb push_back 
#define fir first
#define sec second
#define ms(a,b) memset(a,b,sizeof(a)) 
#define INF 0x3f3f3f3f
#define sp system("pause")
#define multi int T;scanf("%d",&T);while(T--) 
using namespace std;
typedef long long ll;
typedef double db;
const int N=6e6+5;
const ll mod=998244353;
const db pi=acos(-1.0);
ll inv[N],pre[N];
ll qpow(ll a,ll b){
    ll res=1;
    while(b){
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
void invv(int n,int p)//1~n在模p意义下逆元
{
    inv[0]=inv[1]=1;
    for(int i=2;i<=n;i++)
        inv[i]=((-p/i*inv[p%i])%p+p)%p;
}
int main()
{
    #ifndef ONLINE_JUDGE
    freopen("D:\\work\\data.in","r",stdin);
    #endif
    invv(6e6,mod);
    for(ll i=1;i<=6e6;i++){
        pre[i]=(pre[i-1]+3*inv[i]*inv[i])%mod;
    } 
    multi{
        int n;
        scanf("%d",&n);
        printf("%lld\n",pre[n]*inv[n]%mod);
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/Luowaterbi/article/details/107818357
conseillé
Classement