zoukankan      html  css  js  c++  java
  • hdu 6814 Tetrahedron 规律+排列组合逆元

    题意:

    给你一个n,你需要从1到n(闭区间)中选出来三个数a,b,c(可以a=b=c),用它们构成一个直角四面体的三条棱(可看图),问你从D点到下面的三角形做一条垂线h,问你1/h2的期望

    题解:

    那么1/h2=1/a2+1/b2+1/c2

    总数就是n3

    之后就是找分子怎么求,规律:

     ((1/a1*a1)*n*n+(1/a2*a2)*n*n+(1/an*an)*n*n)/(n*n*n)

    a的取值从1到n

    代码:

    #include<stack>
    #include<queue>
    #include<map>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define fi first
    #define se second
    using namespace std;
    typedef long long ll;
    const int maxn=6e6+1;
    const int mod=998244353;
    ll dp[maxn];
    ll ksc(ll a, ll b)
    {
        ll ans = 0;
        while( b > 0 )
        {
            if( b&1 ) ans = (ans + a) % mod;
            a = ( a + a ) % mod;
            b >>= 1;
        }
        return ans;
    }
    ll ppow(ll a,ll b)
    {
        ll ans=1;
        while(b)
        {
            if(b&1) ans=(ans*a)%mod;
            a=(a*a)%mod;
            b>>=1;
        }
        return ans;
    }
    int main()
    {
        //printf("%d
    ",(15*ppow(8,mod-2))%mod);
        ll ans = 0;
        for (ll i = 1; i <= 6000001; i++)
        {
            ll x = ((i * i) % mod);
            ans = (ans + (ppow(x, mod - 2) % mod));
            dp[i] = (ans * 3) % mod;
        }
        ll t;
        scanf("%lld",&t);
        while(t--)
        {
            ll n;
            scanf("%lld",&n);
            printf("%lld
    ",(ksc(dp[n],ppow(n,mod-2)))%mod);
        }
        return 0;
    }
  • 相关阅读:
    OO第一单元总结
    [软件工程]提问回顾与个人总结
    结对项目-最长单词链总结
    [软件工程]第一次阅读作业
    [软件工程] 第0次作业
    提问回顾与个人总结
    结对作业博客
    软工第1次个人作业
    软工第0次个人作业
    OO第四次总结
  • 原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/13441376.html
Copyright © 2011-2022 走看看