简单数论
# 阶乘约数
# 题目
定义阶乘 n! = 1 × 2 × 3 × . . . × n。 请问 100! (100 的阶乘)有多少个正约数
# 分析
唯一分解定理,也称为正整数的唯一质因子分解定理或正整数的唯一素因子分解定理,是数论中的一个重要定理。该定理表明每个大于 1 的正整数都可以唯一地表示为一组质数的乘积。
具体表述如下:
对于任意一个大于 1 的正整数 n,存在一组质数 p1, p2, ..., pk,以及对应的正整数幂次 a1, a2, ..., ak,使得 n = p1^a1 * p2^a2 * ... * pk^ak,并且这个表示方法是唯一的,即如果将 n...
more...
思维与贪心
# 重复字符串
# 题目:
【问题描述】 如果一个字符串 S 恰好可以由某个字符串重复 K 次得到,我们就称 S 是 K 次重复字 符串。例如 abcabcabc 可以看作是 abc 重复 3 次得到,所以 abcabcabc 是 3 次重复字符串。 同理 aaaaaa 既是 2 次重复字符串,又是 3 次重复字符串和 6 次重复字符串。 现在给定一个字符串 S,请你计算最少要修改其中几个字符,可以使 S 变为一个 K 次重复字符串?
【输入格式】 第一行包含一个整数 K。 第二行包含一个只含小写字母的字符串 S。 其中,1 ⩽ K ⩽ 105 , 1 ⩽ |S| ⩽ 105。其中 |S|...
more...
枚举与模拟
# 卡片
# 题目:
小蓝有很多数字卡片,每张卡片上都必然刻有 0 ∼ 9 中的一个数字。 卡片可以用来拼凑数字,假设小蓝拥有刻有数字 1 和数字 2 的卡片各一张,那么他可以 利用这两张卡片拼凑出数字 1, 2, 12, 21 这 4 个正整数。现给定刻有数字 0, 1, . . . , 9 的卡片各 2021 张,小蓝将利用这些卡片从 1 开始连续拼凑 数字,请问他最大能拼到数字几(注意:每张卡片只能利用一次)?
# 思路:
把每个数字的个数用数组记录下来,然后枚举每个数看能不能组成并减掉使用过的数字。分析可以看出数字 1 最先消耗完,所以用 1 判断。
# 代码:
////...
more...
初级篇(副本)
#
# 数据结构
# 优先队列和堆
优先队列(Priority Queue)是一种特殊的队列,它的特点是每次出队的元素是队列中优先级最高的元素。在优先队列中,元素通常带有优先级,这样在出队时会优先选择优先级最高的元素。优先队列常常用于实现任务调度、事件模拟等场景。
在 C++ 中,STL(Standard Template Library)提供了优先队列的实现,可以使用 <queue> 头文件中的 priority_queue 类来创建优先队列。通过指定比较函数或使用默认的比较函数,可以实现不同类型的优先队列(最大堆或最小堆)。
#include...
more...
初级篇
# 暴力搜索
# 递归
在一个函数中再次调用该函数的这种行为叫做递归,这样的函数被称为递归函数。
递归通常包括两个部分:基本情况和递归情况。基本情况是递归函数停止调用自身的条件,而递归情况则是函数继续调用自身的条件。
# 斐波那契数列
斐波那契数列中的每一项都是前两项的和,斐波那契数列可以用递归的方式来定义:F (0) = 0, F (1) = 1, F (n) = F (n-1) + F (n-2)(n ≥ 2)。
#define MAXN_N 100int memo[MAXN_N + 1];int fib(int n){ if(n <= 1) return...
more...
c++标准库
# next_permutation
在 C++ 标准库中, next_permutation 是一个非常实用的函数,它可以用来生成给定序列的下一个字典序排列。这意味着,给定一个序列, next_permutation 能够重新排列其元素,得到一个在所有可能的排列中按字典顺序排在当前排列之后的 “下一个” 排列。如果当前排列已经是所有可能排列中的最后一个,则 next_permutation 会将序列改为最小的排列(即第一个排列),并返回 false ;否则,返回 true 。
next_permutation 定义在头文件 <algorithm>...
more...