zoukankan      html  css  js  c++  java
  • 20180710 考试记录

    T1 小a的强迫症

    dp + 组合数学
    code:

    //By Menteur_Hxy
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #define LL long long
    #define F(i,a,b) for(register int i=(a);i<=(b);i++)
    #define R(i,a,b) for(register int i=(b);i>=(a);i--)
    using namespace std;
    
    LL rd() {
    	LL x=0,f=1; char c=getchar();
    	while(!isdigit(c)) {if(c=='-')f=-f; c=getchar();}
    	while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
    	return x*f;
    }
    
    const int MOD=998244353;
    const int N=100010,M=500010;
    int n;
    int da[N];
    LL fac[M],inv[M];
    
    LL qpow(LL a,LL b) {
    	LL ret=1;
    	while(b) {
    		if(b&1) ret=ret*a%MOD;
    		a=a*a%MOD;
    		b>>=1;
    	}
    	return ret;
    }
    
    void init() {
    	fac[1]=1;
    	F(i,2,M) fac[i]=fac[i-1]*i%MOD;
    	inv[M]=qpow(fac[M],MOD-2);
    	R(i,-1,M-1) inv[i]=(inv[i+1]*(i+1))%MOD;
    }
    
    LL C(int x,int y) {
    	return fac[x]*inv[y]%MOD*inv[x-y]%MOD;
    }
    
    int main() {
    	freopen("qiang.in","r",stdin);
    	freopen("qiang.out","w",stdout);
    	n=rd();
    	F(i,1,n) da[i]=rd();
    	init();
    	LL ans=1,sum=da[1];
    	F(i,2,n) ans=ans*C(sum+da[i]-1,da[i]-1)%MOD,sum+=da[i];
    	printf("%lld",ans);
    	return 0;
    }
    

    T2 数格子



    矩阵快速幂 优化 状压dp
    code:

    //By Menteur_Hxy
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #define LL long long
    #define F(i,a,b) for(register int i=(a);i<=(b);i++)
    #define R(i,a,b) for(register int i=(b);i>=(a);i--)
    using namespace std;
    
    LL rd() {
    	LL x=0,f=1; char c=getchar();
    	while(!isdigit(c)) {if(c=='-')f=-f; c=getchar();}
    	while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
    	return x*f;
    }
    
    const int MOD=998244353;
    const int N=100010,M=500010;
    int n;
    int da[N];
    LL fac[M],inv[M];
    
    LL qpow(LL a,LL b) {
    	LL ret=1;
    	while(b) {
    		if(b&1) ret=ret*a%MOD;
    		a=a*a%MOD;
    		b>>=1;
    	}
    	return ret;
    }
    
    void init() {
    	fac[1]=1;
    	F(i,2,M) fac[i]=fac[i-1]*i%MOD;
    	inv[M]=qpow(fac[M],MOD-2);
    	R(i,-1,M-1) inv[i]=(inv[i+1]*(i+1))%MOD;
    }
    
    LL C(int x,int y) {
    	return fac[x]*inv[y]%MOD*inv[x-y]%MOD;
    }
    
    int main() {
    	freopen("qiang.in","r",stdin);
    	freopen("qiang.out","w",stdout);
    	n=rd();
    	F(i,1,n) da[i]=rd();
    	init();
    	LL ans=1,sum=da[1];
    	F(i,2,n) ans=ans*C(sum+da[i]-1,da[i]-1)%MOD,sum+=da[i];
    	printf("%lld",ans);
    	return 0;
    }
    
    版权声明:本文为博主原创文章,未经博主允许不得转载。 博主:https://www.cnblogs.com/Menteur-Hxy/
  • 相关阅读:
    zabbix 4.0 监控磁盘IO的实施笔记
    梅登黑德定位系统
    sdrplay sdr 支持的sample rate
    记录一下几个中移动可以PING的检测地址及部份DNS设置
    升级mariadb 10后目录权限问题的笔记
    C#单独启动进程的几种方式及使用特点(使用不当导致端口无法释放)
    SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法
    C# 处理大量数据的技巧
    C# 几种集合性能比较
    WPF学习网址整理
  • 原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9290314.html
Copyright © 2011-2022 走看看