• NOIP 模拟 $13; ext{工业题}$


    题解

    本题不用什么推式子,找规律(而且也找不出来)

    可以将整个式子看成一个 (n×m) 矩阵

    考虑 (f_{i,j}),它向右走一步给出 (f_{i,j}×a) 的贡献,向下走一步给出 (f_{i,j}×b) 的贡献,那么它到 (f_{n,m}) 给出 (f_{i,j}×a^{m-j}+f_{i,j}×b^{n-i}) 的贡献

    但是,它到终点会有不同的走法,这个用组合数解即可,注意对于 (f_{i,0}) 它第一步只能向右走,因为向下的数是确定的。其它同理

    预处理出阶乘,逆元和 (a,b) 的幂,按上述求解即可

    Code
    #include<bits/stdc++.h>
    #define ri register signed
    #define p(i) ++i
    using namespace std;
    namespace IO{
        char buf[1<<21],*p1=buf,*p2=buf;
        #define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
        template<typename T>inline void read(T &x) {
            ri f=1;x=0;register char ch=gc();
            while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
            while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
            x=f?x:-x;
        }
    }
    using IO::read;
    namespace nanfeng{
        #define cmax(x,y) ((x)>(y)?(x):(y))
        #define cmin(x,y) ((x)>(y)?(y):(x))
        #define FI FILE *IN
        #define FO FILE *OUT
        typedef long long ll;
        static const int MOD=998244353,N=3e5+7;
        ll numx[N],numy[N],cma[N],cmb[N],frac[N<<1],inv[N<<1],a,b,ans;
        int n,m,mx;
        inline void init(int x) {
            int tmp=x<<1;
            inv[0]=inv[1]=frac[1]=1;
            for (ri i(2);i<=tmp;p(i)) frac[i]=frac[i-1]*i%MOD;
            for (ri i(2);i<=tmp;p(i)) inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
            for (ri i(2);i<=tmp;p(i)) (inv[i]*=inv[i-1])%=MOD;
        }
        inline ll C(int a,int b) {return (!a&&!b)?1:frac[a]*inv[a-b]%MOD*inv[b]%MOD;}
        inline int main() {
            // FI=freopen("nanfeng.in","r",stdin);
            // FO=freopen("nanfeng.out","w",stdout);
            read(n),read(m),read(a),read(b);
            mx=cmax(n,m);
            init(mx);
            cma[0]=cmb[0]=1;
            a%=MOD,b%=MOD;
            for (ri i(1);i<=mx;p(i)) cma[i]=cma[i-1]*a%MOD,cmb[i]=cmb[i-1]*b%MOD;
            for (ri i(1);i<=n;p(i)) read(numx[i]),numx[i]%=MOD;
            for (ri i(1);i<=m;p(i)) read(numy[i]),numy[i]%=MOD;
            for (ri i(1);i<=n;p(i)) (ans+=numx[i]*C(m+n-i-1,m-1)%MOD*cma[m]%MOD*cmb[n-i]%MOD)%=MOD;
            for (ri i(1);i<=m;p(i)) (ans+=numy[i]*C(n+m-i-1,n-1)%MOD*cma[m-i]%MOD*cmb[n]%MOD)%=MOD;
            printf("%lld
    ",ans);
            return 0;
        } 
    }
    int main() {return nanfeng::main();}
    

    此题较坑,他输入的 (a,b,f_{i,0},f_{0,i}) 均为 long long 范围,所以输入完后要先取模。

  • 相关阅读:
    HDU1814 Peaceful Commission
    POJ1679 The Unique MST
    POJ 3243 Clever Y
    POJ 3463 Sightseeing
    POJ1274 The Perfect Stall
    POJ 2417 Discrete Logging
    POJ1011 Sticks
    前端面试资源整理(一)
    小程序和腾讯地图联合使用
    快速创建 HTML5 Canvas 电信网络拓扑图
  • 原文地址:https://www.cnblogs.com/nanfeng-blog/p/15006267.html
Copyright © 2020-2023  润新知