首页 > 其他分享 >P4921/P4931

P4921/P4931

时间:2024-10-22 20:31:24浏览次数:1  
标签:return invfac int long P4931 P4921 fac mod

切不动了!!!

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
inline int read(){int x=0;bool f=0;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return f?-x:x;}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int mod=998244353;
int T,n;
long long fac[2005],inv[2005],invfac[2005],bin[2005],g[2005];
void add(long long &a,long long b){a+=b;if(a>=mod) a-=mod;}
long long Pow(long long a,long long b){
	long long res=1ll;
	for(;b;b>>+1,a=a*a%mod) if(b&1) res=res*a%mod;
	return res;
}
long long C(int n,int m){
	return fac[n]*invfac[n-m]%mod*invfac[m]%mod;
}
int main(){
	fac[0]=invfac[0]=inv[1]=bin[0]=1;
	rep(i,1,2005-1){
		if(i^1) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
		fac[i]=fac[i-1]*i%mod;
		invfac[i]=invfac[i-1]*inv[i]%mod;
		bin[i]=bin[i-1]*2%mod;
	}
	g[0]=1,g[1]=0;
	rep(n,2,1000) g[n]=4ll*n*(n-1)%mod*(g[n-1]+2*(n-1)*g[n-2])%mod;
	T=gi();
	while(T--){
		n=gi();
		rep(k,0,n) printf("%lld\n",C(n,k)*C(n,k)%mod*fac[k]%mod*bin[k]%mod*g[n-k]%mod);
	}
	return 0;
}

同理:

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
inline int read(){int x=0;bool f=0;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return f?-x:x;}
template<typename T>inline bool Max(T &a,T b){return a<b?a=b,1:0;}
template<typename T>inline bool Min(T &a,T b){return b<a?a=b,1:0;}
const int mod=998244353,big=5e6+5;
int T,n,k;
long long fac[big],inv[big],invfac[big],bin[big],g[big];
void add(long long &a,long long b){a+=b;if(a>=mod) a-=mod;}
long long Pow(long long a,long long b){
	long long res=1ll;
	for(;b;b>>+1,a=a*a%mod) if(b&1) res=res*a%mod;
	return res;
}
long long C(int n,int m){
	return fac[n]*invfac[n-m]%mod*invfac[m]%mod;
}
int main(){
	fac[0]=invfac[0]=inv[1]=bin[0]=1;
	rep(i,1,big-1){
		if(i^1) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
		fac[i]=fac[i-1]*i%mod;
		invfac[i]=invfac[i-1]*inv[i]%mod;
		bin[i]=bin[i-1]*2%mod;
	}
	g[0]=1,g[1]=0;
	rep(n,2,big-3) g[n]=4ll*n*(n-1)%mod*(g[n-1]+2*(n-1)*g[n-2])%mod;
	T=read();
	while(T--){
		n=read();k=read(); 
		printf("%lld\n",C(n,k)*C(n,k)%mod*fac[k]%mod*bin[k]%mod*g[n-k]%mod);
	}
	return 0;
}

标签:return,invfac,int,long,P4931,P4921,fac,mod
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18493685

相关文章

  • MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)
    MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)MCP4921简介MCP4921是一款由MicrochipTechnology生产的单通道、12位数模转换器(DAC),具有外部电压参考引脚和SPI接口。它具有以下主要特点:12位分辨率:提供高精度的模拟输出。单通道电压输出:适用于需要单一......
  • P4921 题解
    linkHint:错排计数。\(ans_k=C_n^k\timesA_n^k\times2^k\timesg(n-k)\)\(g(i)\)代表\(i\)对情侣全部错开的方案数。解释一下\(ans_k\)的表达。我们从\(n\)对情侣中无序地抽出\(k\)对情侣,有序地放到\(k\)排座位上,这里的方案数是\(C_n^k\timesA_n^k\)。由于两个......
  • 洛谷 P4931 [MtOI2018] 情侣?给我烧了!(加强版)
    洛谷传送门设\(f_i\)为\(i\)对情侣完全错位的方案数,那么答案为:\[\binom{n}{k}\frac{n!}{(n-k)!}2^kf_{n-k}\]分别代表选择\(k\)对情侣,选择它们的位置,情侣可以换位。\(f_i\)有递推公式:\[f_i=4i(i-1)(f_{i-1}+2(i-1)f_{i-2})\]考虑选出两个人,另外......
  • P4921 [MtOI2018]情侣?给我烧了!
    前言情人节写的这道题,题目名称好符合我当时的心情。题目链接Luogu:P4921解法容斥我们发现最后要求的结果是恰好\(k\)对情侣坐在一起的方案数,我们就不难想到去计算......