【AGC005D】~K Perm Counting(计数抽象成图)

容斥原理。

求出f(m) ,f(m)指代至少有m个位置不合法的方案数。

怎么求?

注意到位置为id,权值为v ,不合法的情况,当且仅当 v = id+k或 v= id-k

因此,我们把每一个位置和权值抽象成点 ,不合法的情况之间连一条边,可以构成二分图。

借用大佬的图。

由此可知,当选了n条边,就恰好n个位置不合法,限制条件是:连的边不能相邻,

把二分图展开成k条链,进行dp。

还是借用大佬ez_lcw的图

由此总共有2n 个点 k 条链,链与链之间无边 互不干涉。

dp(i,j,pd)表示考虑到第i号点, 连了j条边,是否有连接i 到 i-1号点。

转移方程

dp(i,j,0) = dp(i-1,j,0)+dp(i-1,j,1)

dp(i,j,1) = dp(i-1,j-1,0)

则可得f(m) = (n-m)!\times (dp(2n,m,0) + dp(2n,m,1)) 

简单的乘法原理罢了。

ans = \sum _{i = 0} f(m)*(-1)^1

#include<bits/stdc++.h>
using namespace std;
long long n,k;
long long fac[4010];
long long dp[4010][4010][2];
int mod = 1e9+7;
int pd[4999];//判断是否为链头 0 表示是头 头不能连接上一个 
int main(){
	freopen("neverk.in","r",stdin);
	freopen("neverk.out","w",stdout);
	cin>>n>>k;
	fac[0] = 1;
	for(int i = 1;i <= n;i++){
		fac[i] = (fac[i-1]*(long long)i)%mod;
	}
	int tot = 0;
	for(int i=1;i<=k;i++)
	{
		for(int t=0;t<2;t++)
		{
			for(int j=i;j<=n;j+=k)
			{
				tot++;
				if(i!=j) pd[tot]=1;
			}
		}
	}
	dp[0][0][0] = 1;
	for(int i = 1;i <= 2*n;i++){
		for(int j = 0;j <= n;j++){
			dp[i][j][0] = (dp[i-1][j][0] + dp[i-1][j][1])%mod;
			if(j&&pd[i]) dp[i][j][1] = dp[i-1][j-1][0];
		}
	}
	long long cnt = 0;
	for(int i = 0;i <= n;i++){
		//cout<<fac[n-i]<<" "<<dp[2*n][i][0]+dp[2*n][i][1]<<endl;
		long long t = fac[n-i]*(dp[2*n][i][0]+dp[2*n][i][1]);
		t%=mod;
		//cout<<t<<endl;
		if(i%2 == 0){
			cnt = (cnt +t)%mod;
		}
		else{
			cnt = (cnt - t + mod)%mod;
		}
	}
	cout<<cnt;
	return 0;
}

"gt9xx: probe of 0-005d failed with error -1" 这是一个来自电脑或软件的错误信息。这个错误通常出现在与GT9XX设备相关的硬件或驱动程序问题上。 首先,该错误信息中的"gt9xx"指的是一种触摸屏设备,通常用于平板电脑、智能手机或触摸屏显示器等设备上。 出现"probe of 0-005d failed with error -1"错误可能是由以下原因引起的: 1.设备或驱动程序故障:首先,根据错误信息中的"probe"一词,此错误通常与设备或驱动程序的初始化或连接过程有关。可能是设备损坏、驱动程序未正确安装或版本不兼容等原因导致。 2.硬件兼容性问题:在某些情况下,该设备或驱动程序可能与系统硬件不兼容,导致无法正确初始化或连接。这可能是由于过时的硬件、操作系统或驱动程序等引起的。 如何解决这个问题: 1.重新连接设备:首先,尝试重新连接设备并确保连接牢固。如果设备以某种方式损坏,可能需要修复或更换设备。 2.更新驱动程序:确保你的设备驱动程序是最新版本,可以通过设备制造商的官方网站或驱动程序更新工具来获取。 3.检查硬件兼容性:如果你的硬件过时或与该设备不兼容,可能需要考虑升级硬件或更改设备。 4.寻求专业帮助:如果上述方法不起作用,你可以寻求专业技术支持,以获取更详细的指导和解决方案。 总之,"gt9xx: probe of 0-005d failed with error -1"错误是与GT9XX设备相关的一个常见错误,通常与设备或驱动程序的连接或初始化出现问题有关。通过重新连接设备、更新驱动程序、检查硬件兼容性或寻求专业帮助等方法,可以尝试解决此问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值