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

基础题目

超级基础的题

虽然是数学,但是仍以 \(OI\) 的题为例,毕竟 \(OI\) 的组合计数题还是很高质的,但别担心,组合计数主要是数学推导,所以文中的题仅会推导数学的理论知识或公式,不会有代码实现。但为了方便,还是会把题目链接放出来。

注:不是 \(OIer\) 的就不必在意题目的数据范围了,以及题里的取模也不用管

高中生就会

luogu P8557 炼金术(Alchemy)

题目描述

铃是一个爱玩游戏的女孩子。

她在游戏中想要炼制一种稀有合金 —— 这需要 n 种金属来合成。

她准备好矿石后建造了 k 个不同的熔炉,当熔炉启动时,会随机炼出这 n 种金属中的一些(也可能什么都没有)。

如果把每个熔炉炼出的金属收集起来,有了全部 n 种金属,就能造出合金了。澪对此很好奇,对铃说:「我考考你,有多少种情况可以炼出合金呢?」这个简单的问题铃很快就会做了,你能求出结果吗?

答案可能很大,请对 998244353 取模(即除以 998244353 的余数)后输出。

作者很懒,不想形式化题意了,相信聪明的你们有一定能看懂的

思路:

合法方案就是要求每种矿石至少在一个熔炉里被冶炼,那么,我们可以把 每个熔炉看成 元素,每种矿石看成一个集合,某种矿石在哪几个熔炉里冶炼,那么这个集合里就有哪几个元素,所以,我们只许让每个集合 非空,方案就是 合法 的,所以对于每种矿石,它的非空子集就有 \(2^k-1\) 种,\(n\) 种矿石就是 \(n\)\(2^k-1\) 相乘,即 \((2^k-1)^n\) 种方案。

\(OIer\) 说:

代码实现直接敲个快速幂就好了,公式都给你了,不能不会了吧,记得取模!

luogu P3197 [HNOI2008] 越狱

题目描述

监狱有 n 个房间,每个房间关押一个犯人,有 m 种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。

答案对 100,003 取模。

思路:

正难则反:可能发生越狱的方案数 \(=\) 总方案数 \(-\) 不可能发生越狱的方案数

总方案数 很好求,每个房间都有 \(m\) 种宗教可以信仰,\(n\) 个房间就是 \(m^n\) 种方案数

不可能发生越狱的方案数:就是任意相邻的房间的信仰的宗教不同,其实只要保证,每一间房间都和前一间房间的信仰不同,就可以了:第 \(1\) 间房间可以信仰 \(m\) 种宗教;第 \(2\) 间为了跟第 \(1\) 间的信仰不同,只有 \(m-1\) 种宗教可以信仰;第 \(3\) 间只需跟第 \(2\) 间不同即可,也有 \(m-1\) 种宗教可以信仰;第 \(4,5,6...n\) 间,都有 \(m-1\) 种宗教可以信仰,根据 乘法原理,把 \(n\) 间房间的各可信仰数相乘即可:\(m(m-1)^{n-1}\)

所以答案是:\(m^n-m(m-1)^{n-1}\)

\(OIer\) 说:

依旧是快速幂加个取模就可以了

错排数:

介绍:

错排列问题是组合数学中的一个经典问题,指的是将n个元素重新排列,使得每个元素都不在原来的位置上。错排列数记为D(n),即n个元素的错排列数。这个问题最早由尼古拉·伯努利和欧拉研究,因此也称为伯努利-欧拉的装错信封问题。

人话就是,给了一个 \(n\),然后求 \(1\) ~ \(n\) 的所有排列里,每个数字和当前排列下其对应的下标不同的方案数。

\(eg.\) \(n=3:\)

\(2_1,3_2,1_3\)
\(3_1,1_2,2_3\)

就是错排列,右下角的数字就是下表,所以,\(D(3)=2\)

然后,不难发现,\(D(1)=0,D(2)=1,D(3)=2\),这是错排数的前几项

接着推导 \(D(n)\) 的递推式:

\(n\) 个数错排,我们先考虑其中一个数 \(a\),根据定义,这个数不能在其数值所对应的下标 \(a\) 上(就是如果是数字 \(2\),在这个排列里就不能放在下标为 \(2\) 的位置),那么,它可以去侵占其他 \(n-1\) 个数的位置

继续考虑,如果这个数 \(a\) 侵占了其他的 \(n-1\) 个数中的某个数 \(b\) 的位置,那么 \(b\) 可以放到哪里?

有两种选择:一种是反过来偷家,即把 \(b\) 放到 \(a\) 原本正确的位置(就是放到下标为 \(a\) 的位置上),方案数就是 \(D_{n-2}\)

另一种选择\(b\) 去侵占另外的其他 \(n-2\) 个数的位置,方案数就是算上 \(b\) 的那 \(n-1\) 个数的错排数,\(D_{n-1}\)

所以,\(a\) 侵占其他 \(n-1\) 个数中的某一个数的位置的方案数就是 \(D_{n-1}+D_{n-2}\),有 \(n-1\) 个数可以选择侵占,所以 \(D_n=(n-1)(D_{n-1}+D_{n-2})\)

完美的递推式子,当然,还有一个直接计算公式:

\[D_n = n!(\dfrac{(-1)^0}{0!}+\dfrac{(-1)^1}{1!}+\dfrac{(-1)^2}{2!}+\dfrac{(-1)^3}{3!}+...+\dfrac{(-1)^n}{n!}) = n!\Sigma^{n}_{k=0} \dfrac{(-1)^k}{k!} \]

这我就不想证了,感兴趣的话自己去看看吧,问题是这玩意的复杂度也是 \(O(n)\) 的,还不如线性递推,同样 \(O(n)\) 还能把 \(D_{1\sim n}\) 都求出来,不过,这玩意让我想到了一位故式:欧拉函数 \(\phi_n\) 的直接计算式:

\(\phi_n=n(1-\dfrac{1}{p_1})(1-\dfrac{1}{p_2})(1-\dfrac{1}{p_3})...(1-\dfrac{1}{p_k})\) 其中,\(p_i\)\(n\) 的质因子

额,扯远了,这是数论里的,别来我们组合计数里凑热闹

好了,前置知识说完了,看题吧:

luogu P4071 [SDOI2016] 排列计数

题目描述

求有多少种 1 到 n 的排列 a,满足序列恰好有 m 个位置 i,使得 \(a_i=i\)
答案对 \(10^9+7\) 取模。

思路:

就相当于,从 \(n\) 个数里先选 \(m\) 个数,让它们的位置正确,然后剩下 \(n-m\) 个数错排就好了,从 \(n\) 个数里选 \(m\) 个数,有 \(C_{n}^{m}\) 种选择,每种对应的方案数都是剩下 \(n-m\) 个数的错排数 :\(D_{n-m}\)

所以答案:

\[C_{n}^{m} \times D_{n-m} \]

可能会有人说了:\(C_{n}^{m}\) 我还能算,但是 \(D_{n-m}\) 是个什么鬼,但是,别忘了,这是 \(OI\) 题,我们是可以用计算机递推出 \(D_{n-m}\) 的,所以我们就表示成这样了

\(OIer\) 说:
本题每个测试样例有 \(T(T\le 5e5)\) 组数据,且 \(1\le n\le1e6\)\(0\le m\le 1e6\),得 \(O(n)\) 预处理 \(1\sim n\) 的阶乘并 \(O(nlogM)\) 处理其逆元(其中 \(M\) 是模数 \(1e9+7\)),还有 \(O(n)\) 处理错排数 \(D_{1\sim n}\)

Catalan 数

介绍:

卡特兰数(Catalan数)是组合数学中一个常见的数列,通常用于解决各种计数问题。其定义为:第 \(n\) 个卡特兰数 \(C_n\) 可以通过公式计算:\(C_n = \dfrac{(2n)!}{n!(n + 1)!}\)。卡特兰数的前几项为\(1, 1, 2, 5, 14, 42, 132, 429, 1430\)等。它们在许多领域中有实际应用,包括出栈次序、括号序列等问题。

好了,这是我从网上粘来的,看不看吧,直接从例题里看:

luogu P1044 [NOIP 2003 普及组] 栈

相信就算不是 \(OIer\)

http://www.hskmm.com/?act=detail&tid=38425

相关文章:

  • ABP - 事件总线(Event Bus)[IEventBus、LocalEventBus、IntegrationEvent]
  • 【ArcMap】基本操作1:查看属性表Table、测量路线长度、打断点
  • 三种 Badcase 精度验证方案详解与 hbm_infer 部署实录
  • CF512E. Cycling City
  • 好想成为人类啊——2025 . 10 . 24
  • 10 24(+第14场补题)
  • 详细介绍:C++ 位运算 高频面试考点 力扣 268. 丢失的数字 题解 每日一题
  • 详细介绍:第十六届蓝桥杯软件赛C组省赛C++题解(京津冀)
  • OOP实验二
  • ABP - 缓存(Caching)[IDistributedCache、ICacheManager、ICacheKeyNormalizer、[Cache]、[CacheInvalidate]]
  • 《打造自己的 DeepSeek》第 1 期:为什么要打造自己的 DeepSeek?
  • ret2text
  • ABP - 异常处理(Exception Handling)[AbpExceptionFilter、UserFriendlyException、IExceptionSubscriber]
  • 2025年沸腾干燥机厂家权威推荐榜单:专业直销与高效节能技术深度解析,提供优质沸腾干燥设备及定制方案
  • CF Round 1046(#2135) 总结
  • 重组蛋白表达的几种类型介绍
  • ABP - 接口授权 [Authorize、AllowAnonymous、IPermissionChecker]
  • 日总结 17
  • Luogu P5479 [BJOI2015] 隐身术 题解 [ 紫 ] [ 多维 DP ] [ 交换维度 ] [ 后缀数组 ] [ 哈希 ]
  • 2025年10月23日
  • 杂题选做-3
  • 10.24每日总结
  • 利用Eval Villain挖掘CSPT漏洞的完整指南
  • Button按钮插入图片后仍有白色边框的解决办法
  • Hugo主题的修改和配置
  • 多元生成函数+多项式方程组——[AGC058D] Yet Another ABC String
  • ABP - JWT 鉴权(JWT Authentication)[AbpJwtBearerModule、JwtBearerOptions]
  • 最小生成树 kruskal算法
  • 【Java】Synchronized-你知道Java是如何上锁的吗?
  • Java中的字符串及相关类的介绍