首页 > 其他分享 >G - Ban Permutation

G - Ban Permutation

时间:2024-08-24 17:03:46浏览次数:9  
标签:const ll 合法 leq Permutation Ban define

G - Ban Permutation

求长为 \(N(N\leq 100)\) 且满足以下条件的排列 \(P=(P_1,P_2,...,P_N)\) 的个数:

\(\forall 1\leq i\leq N\),\(|P_i-i|\geq X(X\leq 5)\)。

  • 考虑使用容斥
  • \(f[i][j][s]\)表示填到第i个数,确定了j个不合法的位置(只填不合法的),并且\([i-(x-1),i+(x-1)]\)的状态为s,那么这个状态乘上\((n-j)!\)就是至少有j个不合法的方案
  • 为什么不在dp的时候确定剩下的位置,原因是我们让一个数填合法的位置有很多,并且会让我们的状态s无法维护。
  • 而限制它只能填不合法的位置则保证位置i-1不会填到i+(x-1)这个位置,保证了转移的正确性
#include<bits/stdc++.h>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define eb emplace_back
#define mk(x,y) make_pair((x),(y))
#define A puts("YES")
#define B puts("NO")
#define lc (o<<1)
#define rc ((o<<1)|1)
#define pi pair<ll,ll>
using namespace std;
typedef long long ll;
typedef double db;
const int N=105;
const ll P=131;
const ll Q=13331;
const ll inf=1ll<<60;
const ll mo1=1e9+7;
const ll mo2=1e9+9;
const ll mo=998244353;
ll f[N][N][1<<10],n,x,fac[N];
void add(ll &x,ll y){
	x=(x+y)%mo;
}
int main(){
//	freopen("data.in","r",stdin);
	
	fac[0]=1;
	fo(i,1,N-1) fac[i]=fac[i-1]*i%mo;
	
	scanf("%lld %lld",&n,&x);
	f[0][0][0]=1;
	int st=(1<<(2*x-1))-1;
	
	fo(i,0,n-1) fo(j,0,i) fo(k,0,(1<<(2*x-1))-1)  {
		if (!f[i][j][k]) continue;
		add(f[i+1][j][k/2],f[i][j][k]);
		fo(p,-(x-1),x-1) {
			if (i+1+p>0 && i+1+p<=n) {
				if ( !((k/2)&(1<<(p+(x-1)))) ) {
					add(f[i+1][j+1][(k/2)|(1<<(p+(x-1)))], f[i][j][k]);
//					printf("%d\n",(k/2)|(1<<(p+(x-1))));
				}
			}
		}
	}
	
	ll ans=0;
   	fo(i,0,n) {
		fo(k,0,st) {
			if (i&1) add(ans, -f[n][i][k]*fac[n-i]%mo);
			else add(ans, f[n][i][k]*fac[n-i]%mo);
		}
	}
//	printf("%lld\n",ans);
	ans=(ans%mo+mo)%mo;
	printf("%lld",ans);
	
	
	return 0;
}

标签:const,ll,合法,leq,Permutation,Ban,define
From: https://www.cnblogs.com/ganking/p/18377953

相关文章

  • centos(linux): 安装管理fail2ban
    一,官网:https://www.fail2ban.org会跳转到代码站:https://github.com/fail2ban/fail2ban二,安装:用yum安装:[root@blog~]#yuminstallfail2ban安装后查看状态:未启动[root@blog~]#systemctlstatusfail2ban.service○fail2ban.service-Fail2BanServiceLo......
  • docker安装es+kibana
    es,可以选择自己想要的版本dockerrun--nameelasticsearch-p9200:9200-p9300:9300-e"discovery.type=single-node"-eES_JAVA_OPTS="-Xms512m-Xmx512m"-delasticsearch:7.16.2kibanadockerrun--namekibana-eELASTICSEARCH_HOSTS=http://192.168......
  • [题解] permutation
    [题解]Permutation解析一眼DP或者组合。70pts场上推的DP对于\((4,2,2)\),先把所有序列枚举出来:\[\begin{split}1\\\2\\1\\\3\\1\\\4\\--\\2\\\3\\2\\\4\\3\\\4\end{split}\]可以发现,对于分割线上的部分,可以看作\((3,1,1)\)的所有序列......
  • BanG Dream! It's MyGO!!!!!
    BanGDream!It'sMyGO!!!!!题目描述在“BanGDream!It'sMyGO!!!”的世界里,各个乐团的演出和排练场地像星星一样被连接在一起,形成了一张美丽的网络图。每个乐团都有自己独特的演出场地和练习室,这些地点通过各种路径互相连接,组成了一张复杂的图谱。koala作为一名热爱音乐的乐......
  • solution-2022 CCPC Guilin J. Permutation Puzzle
    题解:2022CCPC桂林站J题题解模拟赛T3放了这道题人均场切了。我没删调试爆零了。首先按所有限制连边\(u_i\tov_i\)。题目保证了这是一张有向无环图。我们肯定是只能按照某种拓扑序来填。有一个非常显然的策略是在拓扑排序中按照每个点的后继节点的最小值为第一关键字,更......
  • LeetCode 556. 下一个更大元素 III(next_permutation())
    题目:556.下一个更大元素III思路:用到next_permutation(),细节看注释。next_permutation、prev_permutationclassSolution{public:intnextGreaterElement(intn){ //转变为string类型,便于调用next_permutation()strings=to_string(n);......
  • CF1946E Girl Permutation
    中文题面:https://www.luogu.com.cn/problem/CF1946E先考虑只要求前缀最大值怎么做。从前往后很容易想到\(O(n^3)\)的dp,用前缀和优化可以到\(O(n^2)\).注意相对顺序,\([p_i,p_{i+1}-1]\)选择的数,必须让最大的放在最前面才合法。比如选1,3,9,在[5,8]这个区间,只有9,1,3和9,3,1是合法......
  • iis7/8隐藏banner信息
    原文链接:https://www.cnblogs.com/kowloon/p/9071872.html一、隐藏server版本1、为什么要隐藏?答:服务器端返回信息中包含有软件版本等详细信息,攻击者利用这些信息可以实现更有目的性的攻击。因此隐藏server版本信息,在一定程度上能够提高服务器的安全性。2、未隐藏前查看到的信......
  • next_permutation
    使用next_permutation函数非常简单,以下是具体的步骤和注意事项:步骤:包含头文件:确保包含<algorithm>头文件,因为next_permutation函数位于这个头文件中。#include<algorithm>准备容器:next_permutation可以用于处理任何支持随机访问迭代器的容器,比如vector或strin......
  • Bandicam绿色便携版:高清视频录制的自由之选
    Bandicam绿色便携版这是一款由韩国开发的高清录制视频软件,号称世界三大视频录制神器之一,它录制的视频质量高达4K,帧率高达144FPS,支持多种格式和编码器,还有许多实用的功能和设置,让您的视频录制更加简单和方便。Bandicam绿色便携版的特点是它不需要安装,只需解压缩后运行即可,无需......