首页 > 其他分享 >[校内] 计数练习

[校内] 计数练习

时间:2023-08-26 09:55:33浏览次数:59  
标签:练习 校内 一个 数错 计数 排列 数量

0811T1 计数练习

题意

作为一名普及组选手,小 \(A\) 喜欢数数。

一天,小 \(A\) 学习了排列相关的知识。定义一个长度为 \(n\) 的序列 \(p_{1...n}\) 是一个 \(n\) 阶排列,当且仅当 \(p_{1...n}\) 都是 \([1, n]\) 中的正整数且它们两两不同。

小 \(A\) 想数排列。为了让数排列更有趣,小 \(A\) 决定加入一个限制:

对于一个 \(n\) 阶排列 \(p\) ,小 \(A\) 会构造一个长度为 \(n\) 的序列 \(Q(p)\) ,其中 \(Q(p)_{p_i} = i\) 。小 \(A\) 称排列 \(p\) 是优秀的,当且仅当 \(p\) 的字典序严格小于 \(Q(p)\) 。即存在一个 \(i\) 使得 \(\forall 1 \le j < i, p_j = Q(p)_j\) 且 \(p_i < Q(p)_i\) 。

现在,小 \(A\) 想了一个数 \(n\),他希望对于每个 \([1, n]\) 间的 \(m\),计算好的 \(m\) 阶排列数量, 在开始数这样的排列数量前,小 \(A\) 给了你一个质数 \(mod\) ,希望你先求出好的 \(m\) 阶排列 数量对 \(mod\) 取模的结果。

为了避免极其大的输出,设 表示好的 阶排列数量对 取模的结果,你只需要 输出 ,即所有 的异或和。这样小 在自己数错的时候就有大约 的概率发现自己数错了,并重新数一遍。

Sol

由于 \(Q(Q(p)) = p\),也就是说一个排列的逆排列就是自己。

如果从 \(p\) 和 \(Q(p)\) 的视角出发,那么字典序的关系就是相反的。

那么一个排列一定会贡献 \(1\) 除非 \(p = Q(p)\)。

容易发现,如果所有轮换大小不超过 \(2\),那么组成的排列的逆排列就是自己。

我们记这样的 \(n\) 阶排列数量为 \(f_n\),那么有:

\[f_n = f_{n - 1} + (n - 1) \times f_{n - 2} \]

\[v_i = \dfrac{i! - f_i}{2} \]

标签:练习,校内,一个,数错,计数,排列,数量
From: https://www.cnblogs.com/OIerBoy/p/17658390.html

相关文章

  • DQL-练习数据
    createtableemp(idintcomment'编号',worknovarchar(10)comment'工号',namevarchar(10)comment'姓名',gendercharcomment'性别',agetinyintunsignedcomment'年龄',idcardchar(18)......
  • 一维数组java练习
    1、打印下列图形*****************************************图形一:publicclassHomeWork8_24{publicstatic......
  • 变量和数据类型java练习
    1.①packagecom.company;publicclassHomeWork8_19{publicstaticvoidmain(String[]args){Stringname="小明";intage=25;intseniority=3;intage1=5;Stringsubject="java";......
  • 选择结构和循环结构java练习
    1、通过键盘输入学生分数并根据成绩定档:0-59分“不及格”,60-69分“及格”,70-79分“中等”,80-89分“良好”,90-100分“优秀”importjava.util.Scanner;publicclassHomeWork8_22{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System......
  • 牛客练习赛114 D题题解
    比赛编号太臭了题目链接对一第一组数据,我们形象化的得到下图:如何拆解使其变成一个“顺子”呢,我们像这样:贪心的从后往前取,对于取数列时的终点也就是枚举的起点如果不为0,就向前一直取,如果取到一个数\(x\)发现这个数的个数\(num_x\)是大于\(num_{x-1}\)的,就停止,最后看拆......
  • 《算法笔记》树与二叉树专题练习
    1、复原二叉树(由前序和中序求后序)题目描述小明在做数据结构的作业,其中一题是给你一棵二叉树的前序遍历和中序遍历结果,要求你写出这棵二叉树的后序遍历结果。输入输入包含多组测试数据。每组输入包含两个字符串,分别表示二叉树的前序遍历和中序遍历结果。每个字符串由不重复的大写......
  • python练习题01 碱基统计
     001、测试序列,碱基序列保存只a.fa文件中,统计下面这段序列中A、C、G、T碱基的个数[root@PC1test01]#lsa.fa[root@PC1test01]#cata.fa##测试fasta文件AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC 002、利用基本循环统计[ro......
  • 每日一练 | 华为认证真题练习Day103
    1、网络设备发送的IPv6报文时,会首先将报文长度和NTU值进行对比,如果大于MTU值,则直接丢弃。A.对B.错2、路由器接口输出信息如下,则此接口可以接收哪些组播地址的数据?(多选)A.FF02::2B.FF02::1:FF12:1C.FF02::1:FF6F:4F36D.FF02::13、以下关于IPv6任播地址说法正确的有?(多选)A.目标......
  • 赵老师 计数原理 课程笔记
    计数原理分类加法计数原理与分步乘法计数原理分类加法计数原理引例题干用一个大写的英文字母或一个阿拉伯数字给教室里的一个座位编号,总共能编出多少种不同的号码?解决因为英文字母共有\(26\)个,阿拉伯数字共有\(10\)个,所以总共可以编出\(26+10=36\)种不同的号......
  • YTEZ校内数学集训笔记
    计数原理例题1:用一个大写的英文字母或一个阿拉伯数字给教室里的一个座位编号,总共能编出多少种不同的号码?或:\(a\wedgeb\)有\(a\)无\(b\)有\(b\)无\(a\)有\(a\)有\(b\)且:\(a\veeb\)有\(a\)有\(b\)非:\(┐a\)无\(a\)答案:英文字母共有26个,阿拉伯数......