• 锻造


    这是一道数学题。
    期望是一种很玄妙的东西。比如设一枚硬币抛到正面所需期望次数为x

    可列方程x  =  x/2 + 1,解得x = 2

    那么对于本题来说,开一个dp数组

    如果我们需要一把等级为i的刀,那我们需要一把x - 1的刀和一把x - 2的刀

    求出成功的期望,如果不成功就用得到的x - 2和另一把x - 1的刀再重新锻造

    可得dp[ i ] = dp[ i - 1] + dp[ i - 2 ]

    #include<cmath>
    #include<cstdio>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int p=998244353;
    const int N=1e7+5;
    inline int read(){
        int 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;
    }
    int inv[N],b[N],c[N],f[N];
    inline int sub(int x,int y){
        x-=y;if(x<0)x+=p;return x;
    }
    int main(){
        freopen("forging.in","r",stdin);freopen("forging.out","w",stdout);
        inv[1]=1;
        for(int i=2;i<N;i++)inv[i]=(ll)(p-p/i)*inv[p%i]%p;
        
        int n=read();f[0]=read();
        int bx=read(),by=read(),cx=read(),cy=read(),mod=read();
        b[0]=by+1;c[0]=cy+1;
        for(int i=1;i<n;i++){
        b[i]=((ll)b[i-1]*bx+by)%mod+1;
        c[i]=((ll)c[i-1]*cx+cy)%mod+1;
        }
        f[1]=(ll)((ll)c[0]*inv[min(b[0],c[0])]%p+1)*f[0]%p;
        for(int i=2;i<=n;i++)
        f[i]=((ll)c[i-1]*inv[min(b[i-2],c[i-1])]%p*f[i-1]%p+f[i-2])%p;
        printf("%d
    ",f[n]);
        return 0;
    }
  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/yupeiqi/p/9613705.html
Copyright © 2020-2023  润新知