当前位置: 首页 > news >正文

CF285E Positions in Permutations 分析

题目概述

对于一个 \(n\) 的排列 \(p\) 定义好位置为满足 \(|p_i-i|=1\) 的位置,问恰好为 \(k\) 个好位置的方案。

分析

一看到这道题目,就感觉跟[AGC005D] ~K Perm Counting一样。

考虑容斥,设 \(F(m)\) 表示钦定了 \(m\) 个好位置剩下随便排的方案,\(G(m)\) 表示恰好为 \(m\) 个好位置。

那么根据二项式反演可以得到:

\[G(m)=\sum_{i=m}^n(-1)^{i-m}\binom{i}{m}F(i) \]

考虑怎么求 \(F(m)\)

直接沿用那道题目的分成两部图的方法,然后进行连边,具体而言是左边的 \(i\) 连向右边的 \(i-1\)\(i+1\),可以将左边的看作位置,右边的看作 \(p_i\)

然后我们会依照连边拉出来两条边的数量为 \(n-1\) 的链,其实这样就可以直接 \(dp\) 了,但是我们不要,我们用组合数学的方法。

发现这两条链可以分别处理并且都是互不影响的,所以我们先关注一条链。

我们不能选择两条相邻的边,因为这样会导致他不知道在那个位置,这也就转化成了拥有 \(n-1\) 条边的链选择 \(k\) 条不相邻的边的方案数是多少。

我们考虑我们选择的序列为 \(a\)(长度为 \(k\)),那么他需要满足:对于任意 \(i\geq 2,a_{i+1}\geq a_i+2\)

发现这个约束不好做,转化成相差为一的,套路地令 \(b_i\leftarrow a_i-(i-1)\),那么 \(b\) 满足:\(1\leq b_1<b_2<\dots<b_k=n-(k-1)=n-k+1\)

这相当于在 \(1\)\(n-k+1\) 这些数选择 \(k\),最后排序就是 \(b\) 了。

综上所述,拥有 \(n-1\) 条边的链选择 \(k\) 条不相邻的边的方案数为 \(\binom{n-k+1}{k}\)

我们现在要将两条链组合起来,设 \(f_m\) 表示总共选 \(m\) 条边的方案。

那么显然有转移式子:\(f_m=\sum_{i=0}^m\binom{n-1-i+1}{i}\binom{n-i-(m-i)+1}{m-i}\)

那么有:\(F(m)=f_m(n-m)!\)

然后反演求出 \(G(m)\) 即可。

代码

时间复杂度 \(\mathcal{O}(n^2)\)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#define int long long
#define N 1005
using namespace std;
const int mod = 1e9 + 7;
int jc[N],inv[N];
int qpow(int a,int b) {int res = 1;while(b) {if (b & 1) res = res * a % mod;a = a * a % mod;b >>= 1;}return res;
}
int C(int a,int b) {if (a < 0 || b < 0 || a < b) return 0;return jc[a] * inv[b] % mod * inv[a - b] % mod;
}
int f[N];
signed main(){jc[0] = jc[1] = inv[0] = inv[1] = 1;for (int i = 2;i < N;i ++) jc[i] = jc[i - 1] * i % mod,inv[i] = (mod - mod / i) * inv[mod % i] % mod;for (int i = 2;i < N;i ++) inv[i] = inv[i - 1] * inv[i] % mod;int n,k;cin >> n >> k;for (int i = 0;i <= n;i ++)for (int j = 0;j <= i;j ++) f[i] = (f[i] + C(n - j,j) * C(n - (i - j),i - j) % mod) % mod;int ans = 0;for (int i = k,t = 1;i <= n;i ++,t = -t)ans = (ans + (t * C(i,k) % mod * f[i] % mod * jc[n - i] % mod + mod) % mod) % mod;cout << ans;return 0;
}
http://www.jsqmd.com/news/39841/

相关文章:

  • 2025年口碑好的全拉出三节隐藏轨品牌厂家排行榜
  • 2025年热门的三维调节三节隐藏轨实力厂家TOP推荐榜
  • 2025年热门的重型反弹器优质厂家推荐榜单
  • 2025年热门的橱柜反弹器供应商
  • 2025年比较好的橱柜上翻门高评价厂家推荐榜
  • 2025年质量好的平板铰链厂家最新热销排行
  • 2025年质量好的下翻门上翻门厂家推荐及采购参考
  • 2025年靠谱的三维平板铰链厂家推荐及采购指南
  • 2025年评价高的餐饮广告灯箱厂家最新推荐排行榜
  • 2025年口碑好的粮食烘干网厂家推荐及采购参考
  • 【GitHub每日速递 20251114】3 步实现实时深伪换脸!Deep - Live - Cam 让你秒变任何人
  • 2025年口碑好的茶叶烘干网带用户好评厂家排行
  • 高效办公:用SQL*Loader轻松实现Excel数据入库
  • 2025年评价高的过滤网板厂家选购指南与推荐
  • ヒッチコック
  • PHP 依赖管理器 Composer 2.9 发布
  • 2025年EGUOO睡眠片用法深度解析:权威拆解服用细节与科学逻辑
  • 2025年EGUOO睡眠片用法深度解析:权威拆解剂量、时机与个体适配策略
  • 2025年EGUOO睡眠片:深度解析科学助眠机制与临床验证
  • 2025年11月长白山旅游度假酒店对比榜:5家官方认证住宿全解析
  • 2025年11月长白山旅游度假酒店推荐榜:5家口碑住宿全维度对比
  • 2025年11月长白山度假酒店推荐榜:5C营地与瑞士风木屋综合榜
  • 2025年11月长白山度假酒店推荐榜:民俗与山湖同框的精选排行
  • 价值原语化理论:实践智慧与核心挑战的系统性回应
  • 读社会工程:安全体系中的人性漏洞(第2版)01初探
  • 软件研发 --- 开发时经常遇到的问题
  • 考试小记
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名网页特效库需求探索
  • 价值原语化工程网络:共识、价值与文明的涌现系统
  • TTS-Mini 项目在 Ubuntu 24 服务器上的安装指南