正题

题目链接:https://ac.nowcoder.com/acm/contest/7745/C


题目大意

求一nnn的排列,给mmm个限制pip_ipi​表示1∼pi1\sim p_i1∼pi​不能是pip_ipi​的排列。求方案数。


解题思路

定义fif_ifi​表示1∼pi1\sim p_i1∼pi​是pip_ipi​的排列的情况下1∼pi1\sim p_i1∼pi​的方案数,显然有fi=pi!f_i=p_i!fi​=pi​!。但是如果我们用这个计算就会重复,所以我们需要容斥。定义fif_ifi​表示1∼pi1\sim p_i1∼pi​是pip_ipi​的排列,且1∼pk1\sim p_k1∼pk​不是pkp_kpk​的排列(k<i)(k<i)(k<i)的情况下1∼pi1\sim p_i1∼pi​的方案数,那么有转移方程fi=pi!−∑j=1i−1fj∗(pi−pj)!f_i=p_i!-\sum_{j=1}^{i-1}f_{j}*(p_i-p_j)!fi​=pi​!−j=1∑i−1​fj​∗(pi​−pj​)!

然后答案ans=n!−∑i=1mfi∗(n−pi)!ans=n!-\sum_{i=1}^mf_i*(n-p_i)!ans=n!−i=1∑m​fi​∗(n−pi​)!

时间复杂度O(m2)O(m^2)O(m2)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2100,XJQ=20000311;
ll n,m,fac[N],p[N],f[N];
int main()
{scanf("%lld%lld",&n,&m);fac[0]=1;for(ll i=1;i<=n;i++)fac[i]=fac[i-1]*i%XJQ;for(ll i=1;i<=m;i++)scanf("%lld",&p[i]);sort(p+1,p+1+m);for(ll i=1;i<=m;i++){f[i]=fac[p[i]]%XJQ;for(ll j=1;j<i;j++)f[i]=(f[i]-f[j]*fac[p[i]-p[j]]%XJQ+XJQ)%XJQ;}ll ans=fac[n];for(ll i=1;i<=m;i++)ans=(ans-f[i]*fac[n-p[i]]%XJQ+XJQ)%XJQ;printf("%lld",ans);
}

牛客练习赛71C-数学考试【容斥,dp】相关推荐

  1. 【牛客 - 181F】子序列(容斥,组合数,费马小定理)

    题干: 题目描述 给出一个长度为n的序列,你需要计算出所有长度为k的子序列中,除最大最小数之外所有数的乘积相乘的结果 输入描述: 第一行一个整数T,表示数据组数. 对于每组数据,第一行两个整数N,k, ...

  2. 牛客练习赛24题解(搜索,DP)

    A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...

  3. C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

    Bitset优化Dp 题目链接 一般DP做法 显然后面的数是与前面的数字相关的,所以我们有dp数组,dp[i][j]dp[i][j]dp[i][j]选取了jjj个数,iii是否可以被创造出来,如果可以 ...

  4. 牛客练习赛$18E\ pocky$游戏 状压$dp$

    正解:状压$dp$ 解题报告: 传送门$QwQ$ 首先注意下题目,这个$a_i$不是个排列,,,我开始想了好久说这不是傻逼题直接做嘛然后一看样例发现我是傻逼$/dk$ 一个套路,看到绝对值问题一般就是 ...

  5. 牛客练习赛61 C 四个选项 dp\搜索+组合数学

    https://ac.nowcoder.com/acm/contest/5026/C 思路一:dpdpdp,首先通过并查集处理出所有的连通块(限制条件),然后用dpi,x,y,z,wdp_{i,x,y ...

  6. 牛客练习赛75 E.炒鸡矿工(dp的优化)

    传送门 T1T1T1 定义f[i][j][q]f[i][j][q]f[i][j][q]表示第iii分钟等级为jjj,距离下次收矿还剩qqq分钟的最大收益 枚举iii,枚举jjj,枚举qqq,复杂度达到 ...

  7. E-牛牛小数点_牛客练习赛89(数学)

    E-牛牛小数点_牛客练习赛89 (nowcoder.com) 题目描述 牛牛想和点点交朋友, 于是点点给了牛牛一个问题. 定义关于小数 xxx 的函数 f(x)f(x)f(x), 表示 xxx 中两个 ...

  8. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  9. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. TensorFlow指定CPU和GPU方法
  2. 攻防世界Reverse第二题insanity
  3. asp服务器_200行代码,7个对象——让你了解ASP.NET Core框架的本质「3.x版」
  4. 疯狂android源码中文乱码无gbk,我的Android进阶之旅------Android使用cmd窗口进行adb logcat时出现中文乱码问题的解决办法...
  5. 对于下一代互联网的畅想
  6. Hadoop_NameNode_代码分析_目录树(2)
  7. 搜索时展示的是名字,传给后端的是id
  8. 【渝粤题库】广东开放大学 劳动关系理论与实务 形成性考核
  9. 開博客了, 因為搞Delphi 開發的關於Delphi學習
  10. linux下安装指定版本的nodejs(升级到指定版本)
  11. Codeforces 719B Anatoly and Cockroaches(元素的交叉排列问题)
  12. ISA Server中***客户端打开非80端口网站速度慢的解决访问
  13. c语言调光程序,dmx512协议c语言编程
  14. Python自学教程第2期-求100以内奇数和
  15. linux 命令系列之 history(41)
  16. python里面else什么意思_python中if else和if elif else有什么区别?
  17. 计算机操作系统 电子科技大学 期末考试
  18. 纯HTML写国际象棋棋盘
  19. 基础操作案例 :ArcGIS PRO基础教程(一)
  20. 【转载】破解物联网落地困境-阿里云硬件接入最佳实践

热门文章

  1. docker 修改阿里镜像源_Jetson Nano 修改源镜像
  2. c语言环境窗口组成,如何搭建C语言环境
  3. 10玩rust_C++工程师的Rust迁移之路(5)- 继承与组合 - 下
  4. 下学期计算机教学工作计划,初中信息技术下学期教学工作计划
  5. hadoop可以解决什么问题_聊一聊,临时工外包可以为企业解决什么问题
  6. HTML阅读位置,script在HTML文档中位置
  7. java web编写计算器_javaWeb 使用 jsp 和 javaBean 实现计算器功能
  8. leetcode93. 复原 IP 地址
  9. 每天一小时python官方文档学习(四)————数据结构之列表
  10. [C++STL]C++实现vector容器