zoukankan      html  css  js  c++  java
  • HDU6822:Paperfolding——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=6822

    给一张纸,随机四个方向折 $n$ 次,然后横竖切一刀,问纸片的期望个数。

    题咋都是期望(

    可以发现,上下折一次相当于横着切刀数翻一倍,左右折一次相当于竖着切刀数翻一倍。

    设上下折次数为 $x$,则纸片数为 $(2^x+1)(2^{n-x}+1)$。

    那么期望为( $P(x)$千万别求错(被坑了),然后看到组合数想到二项式定理即可以推出):$2*3^n/2^n+2^n+1$

    #include<bits/stdc++.h>
    #define space putchar(' ')
    #define enter putchar('
    ')
    using namespace std;
    typedef long long ll;
    const ll p=998244353;
    inline ll read(){
        ll X=0,w=0;char ch=0;
        while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
        while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
        return w?-X:X;
    }
    void write(ll x){
        if(x<0)putchar('-'),x=-x;
        if(x>9)write(x/10);
        putchar(x%10+'0');
    }
    ll qpow(ll k,ll n){
        ll res=1;k%=p;
        while(n){
            if(n&1){
                res=res*k%p;
            }
            k=k*k%p;n>>=1;
        }
        return res;
    }
    int main(){
        int T=read();
        while(T--){
            //2*3^n/2^n+2^n+1
            ll n=read();
            ll n2=qpow(2,n);
            ll ans=2*qpow(3,n)%p;
            ans=ans*qpow(n2,p-2)%p;
            ans=(ans+n2+1)%p;
            write(ans);enter;
        }
        return 0;
    }

    +++++++++++++++++++++++++++++++++++++++++++

     +本文作者:luyouqi233。               +

     +欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

    +++++++++++++++++++++++++++++++++++++++++++

  • 相关阅读:
    PG
    unzip
    yum
    PG
    SQL
    Grails
    Grails
    Grails
    Chrome
    HTML
  • 原文地址:https://www.cnblogs.com/luyouqi233/p/13434905.html
Copyright © 2011-2022 走看看