• 上午小测2 A. Matrix 数学


    题目描述



    分析

    代码

    #include<cstdio>
    #define rg register
    inline int read(){
    	rg int x=0,fh=1;
    	rg char ch=getchar();
    	while(ch<'0' || ch>'9'){
    		if(ch=='-') fh=-1;
    		ch=getchar();
    	}
    	while(ch>='0' && ch<='9'){
    		x=(x<<1)+(x<<3)+(ch^48);
    		ch=getchar();
    	}
    	return x*fh;
    }
    const int maxn=5e3+5,maxm=1e6+5;
    const int mod=1e9+7;
    int f[maxn][maxn],n,a,b,l[maxm],t[maxm];
    int ksm(int ds,int zs){
    	int ans=1;
    	while(zs){
    		if(zs&1) ans=1LL*ans*ds%mod;
    		ds=1LL*ds*ds%mod;
    		zs>>=1;
    	}
    	return ans;
    }
    int ny[maxm],jc[maxm],jcc[maxm];
    int getC(int nn,int mm){
    	return 1LL*jc[nn]*jcc[mm]%mod*jcc[nn-mm]%mod;
    }
    int main(){
    	n=read(),a=read(),b=read();
    	if(n<=5000){
    		for(rg int i=1;i<=n;i++){
    			f[1][i]=read();
    		}
    		for(rg int i=1;i<=n;i++){
    			f[i][1]=read();
    		}
    		for(rg int i=2;i<=n;i++){
    			for(rg int j=2;j<=n;j++){
    				f[i][j]=1LL*a*f[i-1][j]%mod+1LL*b*f[i][j-1]%mod;
    				if(f[i][j]>=mod) f[i][j]-=mod;
    			}
    		}
    		printf("%d
    ",f[n][n]);
    	} else if(a==0){
    		for(rg int i=1;i<=n;i++){
    			l[i]=read();
    		}
    		for(rg int i=1;i<=n;i++){
    			t[i]=read();
    		}
    		rg int nans=1LL*t[n]*ksm(b,n-1)%mod;
    		printf("%d
    ",nans);
    	} else {
    		for(rg int i=1;i<=n;i++){
    			l[i]=read();
    		}
    		for(rg int i=1;i<=n;i++){
    			t[i]=read();
    		}
    		ny[1]=1;
    		for(rg int i=2;i<maxm;i++){
    			ny[i]=1LL*(mod-mod/i)*ny[mod%i]%mod;
    		}
    		jc[0]=jcc[0]=1;
    		for(rg int i=1;i<maxm;i++){
    			jc[i]=1LL*jc[i-1]*i%mod;
    			jcc[i]=1LL*jcc[i-1]*ny[i]%mod;
    		}
    		rg int now,ans=0;
    		for(rg int i=2;i<=n;i++){
    			now=1LL*getC(n+n-2-i,n-2)%mod*ksm(a,n-1)%mod*ksm(b,n-i)%mod;
    			ans+=1LL*now*l[i]%mod;
    			ans%=mod;
    		}
    		for(rg int i=2;i<=n;i++){
    			now=1LL*getC(n+n-2-i,n-2)%mod*ksm(b,n-1)%mod*ksm(a,n-i)%mod;
    			ans+=1LL*now*t[i]%mod;
    			ans%=mod;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 1)D. Frequency of String
    edu30F. Forbidden Indices
    QQ登录模拟GUI综合
    Thread与Runnable线程继承与实现
    windowsProgram系统强制隐藏解除代码
    最长公共上升子序列(LCIS问题)
    分层图学习笔记 & [JLOI2011]飞行路线题解
    Luogu P1441 砝码称重
    NOIP 2020 复习计划
    浅析BST二叉搜索树
  • 原文地址:https://www.cnblogs.com/liuchanglc/p/13895850.html
Copyright © 2020-2023  润新知