首页 > 其他分享 >解题报告-论对“阶乘计数”的新理解

解题报告-论对“阶乘计数”的新理解

时间:2024-12-11 19:54:21浏览次数:3  
标签:Lucas text times 计数 解题 论对 阶乘 mod

解题报告-论对“阶乘计数”的新理解

这道题是我至今为止为一一道从开始到结束自己想出来的计数蓝题。其实性质很简单,把整个序列看成一个二叉小根堆,然后树形 \(\text{DP}\),在一个子树中,必然是根是最小的,考虑给左子树分配哪些数,右子树分配哪些数,然后 \(ans_{rt}=ans_{ls}\times ans_{rs}\times C_{siz_{ls}+siz_{rs}}^{siz_{ls}}\) 即可。直到这里,我还认为它是一道值得推荐的好题,思维难度上把序列立起来变成了堆,后面还用了树形 \(\text{DP}\);我从开始到想完一共用了一个多小时。

但是后面就逐渐恶心起来了。当年 \(\text{ZJOI}\) 设立模数 \(m\) 是反打表的,但是这里的模数却是真正有卡解法的作用的。正常而言,当我们计算 \(C_{2}^{2}\) 的时候,我们会用 \(\frac{2!}{2!\times (2-2)!}\) 这个算式,最后得到答案 \(1\),其中下面的部分可以用快速幂求逆元。但是当模数 \(mod=2\) 的时候,\(2!\mod 2=0\),所以这个算式求出来是 \(0\)。那这个时候怎么办呢?

这把我逼着去学了 \(\text{Lucas}\) 定理。其内容是 \(C_{m}^{n}=C_{\lfloor \frac{m}{mod}\rfloor}^{\lfloor \frac{n}{mod}\rfloor}\times C_{m\mod mod}^{n\mod mod}\)。也就是说,无论要计算的组合数有多大,我们都可以把其表示为一堆 \(C_j^i\) 相乘的形式,其中 \(i<mod,j<mod\)。

以前我们认为 \(\text{Lucas}\) 的实际意义是降低阶乘的计算复杂度,在这里其又衍生了一种新的情况:防止出现因 \(mod\) 过小而导致 \(\texttt{\color{Red}Wrong Answer}\) 的情况。

总结下来,这道题有以下两个好处:

  • 锻炼思维。这确实是一个思维既不明显又不毒瘤的好题,但这不是很重点。
  • 学会 \(\text{Lucas}\) 定理,和了解其新用法。以后在做 \(mod\) 不定的题的时候,除非有 \(mod>10^8\) 之类的限定,一定要用 \(\text{Lucas}\) 定理求方案数!

标签:Lucas,text,times,计数,解题,论对,阶乘,mod
From: https://www.cnblogs.com/KarmaticEnding/p/18600591

相关文章

  • 解题报告-论对“动态规划方程推导”的新理解
    解题报告-论对“动态规划方程推导”的新理解方程推导是动态规划的一大难点。其既要合法,又要有用,还要推正确。实际上,动态规划题就是一个方程。今天晚上被这道题卡了\(2\)个小时。这其实就是一道朴素的线性动态规划题目,但是由于它的方程,使我最终没把这道题做出来。去看题解之后,......
  • 解题报告-论对“分组背包”的新理解
    解题报告-论对“分组背包”的新理解分组背包都知道,但是有一种新式分组背包,它不像我们想的那样每组只能选一个,但是这样的背包问题又是与分组强相关的,那么怎么做呢?这道题、这道题和这道题就是这种分组背包的典范。这种背包问题的共同特征是:选完一组背包中的上一个后,才能选下一个。......
  • Codeforces Round 992 (Div. 2) 解题报告
    比赛地址:https://codeforces.com/contest/2040A.GameofDivision题目https://codeforces.com/contest/2040/problem/A题意给你一个长度为\(n\)的整数数组\(a_1,a_2,\ldots,a_n\)和一个整数数组\(k\)。两个玩家正在玩一个游戏。第一个玩家选择一个索引\(1\l......
  • 解题报告-论对“依赖背包”的新理解
    解题报告-论对“依赖背包”的新理解依赖背包的依赖关系组成一棵树。那么为什么不能按照树形\(\text{DP}\)的方式来思考它呢?这是个模板题。既然我们说了按照树形\(\text{DP}\)的方式思考它,就要打破常规的\(\text{DP}\)思维。树形\(\text{DP}\)的特点之一就是考虑每个子......
  • 解题报告-论对“排序”的新理解
    解题报告-论对“排序”的新理解这样排序的问题,一般都是多次排序,然后查询一个位置。这也就意味着,这样的题一般有多样的特殊性质。如果我们多次暴力排序,那么复杂度可以近似\(O(nm\logn)\),肯定是不行的。这个时候,我们就要拿出针对这种题的\(\texttt{Trick}\)——\(01\)序列。......
  • 洛谷解题日记14||前缀和,差分与离散化
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(){intn;cin>>n;//读取区间的个数nvector<pair<int,int>>intervals(n);//存储区间的起点和终点,使用pair类型//读......
  • JAVA学习-练习试用Java实现“从用户输入获取一个整数n,并打印出从1到n的所有整数的阶乘
    问题:编写一个Java程序,从用户输入获取一个整数n,并打印出从1到n的所有整数的阶乘。解答思路:以下是一个Java程序,它接受用户输入的整数n,并打印出从1到n的所有整数的阶乘:importjava.util.Scanner;publicclassFactorialCalculator{publicstaticvoidmain(String[]......
  • 解题报告-论对“区间可持久化”的新理解
    解题报告-论对“区间可持久化”的新理解当我第一眼看到“可持久化\(\texttt{Trie}\)”的时候,我以为这不过是一个\(\texttt{Trie}\)+可持久化罢了。事实证明也是这样,在后面的代码实现中,我也是一遍打对了这个紫色板子。那么,一道模板题,有什么好说的?正是因为控住我的不是模板,这道......
  • 解题报告:论对“多元环”的新理解
    解题报告:论对“多元环”的新理解这道题真的把我创红温了。。。直到最后看题解才恍然大悟。推荐这道题的原因:十分板。在以后的学习中,我们还会遇到很多多元环,都可以这样处理。在做题的时候,我有过很多想法。观察到了一切性质,都不能用。绕来绕去,还是死在了\(O(n^3)\)上。其中,我......
  • CTFHub解题笔记之Web信息泄露篇:5.备份文件下载(vim缓存)
    1.题目描述题目位置网页显示2.解题思路Vim是从vi发展出来的一个文本编辑器。在编辑文件的过程中,Vim将会在当前目录中自动生成一个以.swp结尾的临时交换文件,用于备份缓冲区中的内容,以便在意外退出时可以恢复之前编辑的内容。当完成编辑并保存退出后,临时交换文件将会被删除......