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


这样大家在学习算法的时候就可以执行这样的流程:

%
阅读我的【学习笔记】 / 【算法全家桶】学习算法 ⇒\Rightarrow⇒ 阅读我的相应算法的【解题报告】获得高质量题单 ⇒\Rightarrow⇒ 根据我的一句话题解的提示尝试自己解决问题 ⇒\Rightarrow⇒ 点开我的详细题解链接学习巩固(好耶)

%
解题报告系列合集:【解题报告系列】超高质量题单 + 题解(ACM / OI)

本题单前置知识:《组合数学全家桶》(ACM / OI 全网最全,清晰易懂)

目录

  • 一、计数技巧
    • 1. 捆绑法
    • 2. 插空法
    • 3. 隔板法
  • 二、Problem
    • A、(P2822 [NOIP2016 提高组]) 组合数问题(1)
    • B、(P5520 [yLOI2019]) 青原樱(插空法)
    • C、(UVA10943) How do you add?(隔板法)
    • D、(P3197 [HNOI2008])越狱(减法原理,组合计数)
    • E、(UVA12001) UVa Panel Discussion(组合计数、分类讨论)
    • F、(2014 ICPC Xian F)Color
    • G、(2019 ICPC shanghai 网络赛 D) Counting Sequences I
    • H、(2019 ICPC nanjing B) Chessboard
    • G、(2019 ICPC nanchang C) And and Pair

一、计数技巧

等价替代

当我们需要计算一些带特殊条件的方案数时,可以用一些等价替代的方法。具体来讲,我们构造一个双射(一一映射),将每一种原问题的方案 映射为新问题的一种方案,并使答案更容易计算。 常用的有捆绑法、插空法、隔板法等。

1. 捆绑法

也称整体法,在计数时,当要求某些元素必须相邻时,先把他们看作一个整体,然后把所有整体都当成一个个元素和剩余元素一起考虑计数。要注意:整体内部也有顺序,也要乘上整体内部的排列数。


Example A

ABCDEABCDEABCDE 五个人要排队,AAA 和 BBB 要相邻, CCC 和 DDD 要相邻,求一共有多少种排列方法。

Solution

首先将 AB,CDAB,CDAB,CD 分别看成一个整体,然后变成 333 个元素的排列问题, 方案数为 3!=63! = 63!=6,然后考虑 AB,CDAB,CDAB,CD 内部的相对顺序,共有 A22+A22=4A_2^2+A_2^2 = 4A22​+A22​=4 种情况, 最终根据乘法原理答案为 6×4=246×4 = 246×4=24 。

2. 插空法

当要求若干元素两两不相邻时,可以先将其他元素放好,然后将这些元素插入空隙或者序列两端当中,进行计数。


Example B

ABCDEFGABCDEFGABCDEFG 七个人要排队,ABCABCABC 三个人两两不相邻,求方案数。 先将剩下四个人排好,有 4!=244! = 244!=24 种方案,然后将 ABCABCABC 三个人插入 4+1=54+1=54+1=5 个空当中,有A53=5×4×3=60A_5^3=5×4\times 3 = 60A53​=5×4×3=60 种方案,最终答案为 24×60=144024×60 = 144024×60=1440 。

Example C

一张节目表上有 3 个节目,保持其相对顺序不变,再加入 2 个新节目,有多少种方案?

Solution

捆绑法 + 插空法

对于这两个新节目我们可以分为两种情况:

  1. 若两个新节目相邻,那么 3 个节目有 4 个空,再考虑内部顺序,总方案数为 C41×A22C_4^1\times A_2^2C41​×A22​ 。
  2. 若两个节目不相邻,那么 2 个节目插入 4 个空中,方案数为 A42A_4^2A42​

则总方案数即 C41×A22+A42C_4^1\times A_2^2+A_4^2C41​×A22​+A42​ 。

3. 隔板法

在解决若干相同元素分组问题时,若要求分为 mmm 组,其中每组至少一个元素,则可以转化为在排成一列的这些元素中插入 m−1m-1m−1 个 “ 隔板 ” ,达到分组目的。

可将不可区分物品分配问题 / 不定方程整数解问题 转化为 隔板组合问题。


Example C

nnn 个小球放到 mmm 个盒子,要求每个盒子不为空。

Solution

我们可以将这 nnn 个小球摆成一排,从左往右依次插入 m−1m−1m−1 块隔板,代表每 个盒子分到的部分,即每种插板的方案和原来的每一种分配方案是一一对 应的,m−1m−1m−1块隔板插入 n−1n−1n−1 个空当中(因为要求非空所以不能插在最左和最右位置),所以总方案数为:Cn−1m−1C_{n-1}^{m-1}Cn−1m−1​ 。


Example D

nnn 个小球放到 mmm 个盒子,每个盒子可以为空。

Solution

上一题可以抽象为数学模型:求方程 x1+x2+⋅⋅⋅+xm=nx_1 +x_2 +···+x_m = nx1​+x2​+⋅⋅⋅+xm​=n 的整数解,满足 xi≥1x_i ≥ 1xi​≥1 。非空即将上题的限制改成 xi≥0x_i ≥ 0xi​≥0,我们可以设 mmm 个新变量 yi=xi+1≥1y_i = x_i + 1 ≥ 1yi​=xi​+1≥1,转化为求方程 y1+y2+⋅⋅⋅+ym=n+my_1 +y_2 +···+y_m = n+my1​+y2​+⋅⋅⋅+ym​=n+m 的非零整数解,这样就转化为了上一题的模型,直接使用上题的结论,得到总方案数为:Cn+m−1m−1C_{n+m-1}^{m-1}Cn+m−1m−1​


Example E

经典例题:方程 x1+x2+x3+x4+x5=21x_1+x_2+x_3+x_4+x_5=21x1​+x2​+x3​+x4​+x5​=21 有多少个解?其中 xix_ixi​ 是非负整数。且满足下列条件:

首先原式根据隔板法显然答案为 C254C_{25}^{4}C254​

1)x1≥1x_1\ge 1x1​≥1

由于 x1≥1x_1\ge 1x1​≥1 ,我们可以设 y1+1=x1≥1,y1≥0y_1+1=x_1\ge 1,y_1\ge0y1​+1=x1​≥1,y1​≥0。这样所有的解均为非负整数。

方程转化为:
y1+1+x2+x3+x4+x5=21y_1+1+x_2+x_3+x_4+x_5=21\\ y1​+1+x2​+x3​+x4​+x5​=21
即:
y1+x2+x3+x4+x5=20y_1+x_2+x_3+x_4+x_5=20 y1​+x2​+x3​+x4​+x5​=20
答案显然为 C20+5−15−1=C244C_{20+5-1}^{5-1}=C_{24}^{4}C20+5−15−1​=C244​

2)xi≥2,i=1,2,3,4,5x_i\ge 2,i=1,2,3,4,5xi​≥2,i=1,2,3,4,5

设 y1+2=x1,y2+2=x2,⋯,y5+2=x5y_1+2=x_1,y_2+2=x_2,\cdots ,y_5+2=x_5y1​+2=x1​,y2​+2=x2​,⋯,y5​+2=x5​

则原方程转换为:
y1+y2+y3+y4+y5=11y_1+y_2+y_3+y_4+y_5=11 y1​+y2​+y3​+y4​+y5​=11
显然答案为 C11+4−15−1=C154C_{11+4-1}^{5-1}=C_{15}^{4}C11+4−15−1​=C154​ 。

3)0≤x1≤100\le x_1\le 100≤x1​≤10

我们只需要用总方案数减去 x1≥11x_1\ge 11x1​≥11 的方案数即可。

x1≥11x_1\ge 11x1​≥11 的方案数显然为 C144C_{14}^{4}C144​ 。

则合法的方案数为: C(25,4)−C(14,4)C(25,4)-C(14,4)C(25,4)−C(14,4) 。


Example F

方程 x1+x2+x3≤11x_1+x_2+x_3\le 11x1​+x2​+x3​≤11 有多少个非负整数解?即 xix_ixi​ 是非负整数。

Solution

方程可以转化为:
x1+x2+x3+x4=11x_1+x_2+x_3+x_4=11 x1​+x2​+x3​+x4​=11
答案显然为 C143C_{14}^{3}C143​ 。


Example G

方程 x1+x2+x3=13x_1+x_2+x_3=13x1​+x2​+x3​=13 有多少个解?其中 x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​ 是小于 666 的非负整数。

Solution

首先不考虑限制条件,总方案数为 C(15,2)C(15,2)C(15,2) 。

设 AAA 代表 x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​ 为非负整数且 x1≥6x_1\ge 6x1​≥6 的解的集合

设 BBB 代表 x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​ 为非负整数且 x2≥6x_2\ge 6x2​≥6 的解的集合

设 CCC 代表 x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​ 为非负整数且 x3≥6x_3\ge 6x3​≥6 的解的集合

故满足条件的解的数量为:
C(15,2)−∣A∪B∪C∣=C(15,2)−{∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣}=C(15,2)−{3×C(9,2)−3×C(3,2)+0}\begin{aligned} & \ \ \ \ \ \ C(15,2)-|A∪B∪C| & \\ &= C(15,2)-\{|A|+|B|+|C|-|A∩B|-|A∩C|-|B∩C|+|A∩B∩C|\} \\ & =C(15,2)-\{3\times C(9,2)-3\times C(3,2)+0\} &\end{aligned} ​      C(15,2)−∣A∪B∪C∣=C(15,2)−{∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣}=C(15,2)−{3×C(9,2)−3×C(3,2)+0}​​
注:∣A∩B∩C∣=0|A∩B∩C|=0∣A∩B∩C∣=0 ,因为不可能出现 x1+x2+x3=13x_1+x_2+x_3=13x1​+x2​+x3​=13 且 x1,x2,x3x_1,x_2,x_3x1​,x2​,x3​ 均大于 666 的情况,因为 18≥1318\ge 1318≥13 。

Example G

有多少种方式把 666 个玩具分给 333 个不同的孩子并使得每个孩子至少得到一个玩具。

Solution

首先不考虑限制条件,总方案数为 363^636 。

设 AAA 代表的第一个孩子没有得到玩具的方案数的集合

设 BBB 代表的第二个孩子没有得到玩具的方案数的集合

设 CCC 代表的第三个孩子没有得到玩具的方案数的集合

故满足条件的分配方式的数量为:
36−∣A∪B∪C∣=36−{∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣}=36−{3×26−3+0}=540\begin{aligned} & \ \ \ \ \ \ 3^6-|A∪B∪C| & \\ &= 3^6-\{|A|+|B|+|C|-|A∩B|-|A∩C|-|B∩C|+|A∩B∩C|\} \\ & =3^6-\{3\times 2^6-3+0\} & \\ & = 540&\end{aligned} ​      36−∣A∪B∪C∣=36−{∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣}=36−{3×26−3+0}=540​​
注:∣A∩B∩C∣=0|A∩B∩C|=0∣A∩B∩C∣=0 ,因为不可能出现的三个孩子均没有玩具的情况。

二、Problem

A、(P2822 [NOIP2016 提高组]) 组合数问题(1)

姑且算作模板题

0≤n,m≤2×1030 \leq n, m \leq 2 \times 10^30≤n,m≤2×103 ,1≤t≤1041 \leq t \leq 10^41≤t≤104 。

Solution

一个显而易见的思路就是预处理出组合数然后判断满足条件的 (i,j)(i,j)(i,j) 有多少个,询问的时候直接输出即可。

那么如何判断答案呢,我们发现满足条件当且仅当 k∣Cijk\ |\ C_{i}^jk ∣ Cij​,并且因为递推求组合数的时候如果不模上一个数的话很快就爆了,所以结合起来发现,我们可以在递推的时候模上 kkk ,最后如果 C[i][j]==0 ,说明这组 (i,j)(i,j)(i,j) 满足条件,ans ++

那么如何去预处理保存答案呢,可以看到她问的是一个区间 i≤n,j≤mi\le n,j\le mi≤n,j≤m,显而易见的可以使用二维前缀和维护区间的答案,然后直接输出即可。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
using namespace std;
typedef long long ll;
typedef int itn;
typedef pair<int, int>PII;
const int N = 2e3 + 7, mod = 1e9 + 7;int n, m, t, k;
int C[N + 7][N + 7], sum[N + 7][N + 7];int main()
{scanf("%d%d", &t, &k);for(int i = 0; i < N; ++ i) C[i][0] = 1;for(int i = 1; i < N; ++ i)for(int j = 1; j <= i; ++ j)C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % k;for(int i = 1; i < N; ++ i) {for(int j = 1; j < N; ++ j) {if(C[i][j] == 0 && j <= i) sum[i][j] ++ ;sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + sum[i][j];}}while(t -- ) {scanf("%d%d", &n, &m);printf("%d\n", sum[n][m]);}return 0;
}

B、(P5520 [yLOI2019]) 青原樱(插空法)

Problem

扶苏是一个非常喜欢边听古风鸽边写数学题的人,因此这道题其实是个五三原题。

扶苏希望重现青原上樱花盛开的景色,于是他准备了很多互不相同樱花树幼苗,准备种成一行。

这一行中,一共有 nnn 个位置可以种下樱花,而扶苏准备了 mmm 支幼苗。由于樱花盛放时对左右空间需求非常大,所以樱花不能紧挨着种植,也就是任意两支幼苗之间必须至少存在一个不种花的空位置。

按照这种方式种花并不难,但是令扶苏感到好奇的是一共有多少合法的方案让他把这 mmm 支幼苗都种下去。一个方案是合法的当且仅当他满足上一段中叙述的要求。如果我们将花按照 1,2,3,…,m1,2,3,\dots,m1,2,3,…,m 编号,两种方案不同当且仅当被选择种花的位置不同或从左向右数花的编号序列不同。

为了避免输出过大,答案对一个参数 ppp 取模。

Solution

其实就是一个插空法,因为所有的树苗不能相邻放置,而一共有 nnn 个位置,从中选取 mmm 个用来放树苗,还剩 n−mn-mn−m 个位置,也就是 n−m+1n-m+1n−m+1 个空,并且因为只是一排树苗,还有顺序的限制,所以答案就是从 n−m+1n-m+1n−m+1 个空里选择 mmm 个空放树苗,即: An−m+1mA_{n-m+1}^{m}An−m+1m​。
CF451E Devu and Flowers

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
using namespace std;
typedef long long ll;
typedef int itn;
typedef pair<int, int>PII;
const int N = 25;
const double PI = acos(-1.0);int n, m, type, p;
ll ans;
int main()
{scanf("%d%d%d%d", &type, &n, &m, &p);ans = 1;for(int i = n - m + 1; i > n - 2 * m + 1; -- i) {if(i != 0) ans = (ans * 1ll * i) % p;}printf("%lld\n", ans);return 0;
}

组合计数相关技巧

C、(UVA10943) How do you add?(隔板法)

Weblink

https://www.luogu.com.cn/problem/UVA10943

Problem

多组数据。

每行输入两个数 n,kn,kn,k,输出一行一个数表示把 kkk 个 [0,n][0,n][0,n] 内的整数相加使其和为 nnn 的方案数。

输入一行两个 000000 表示输入结束。

由于答案可能很大,输出方案数 mod106\bmod 10^6mod106 的结果。

1≤n,k≤1001\leq n,k\leq 1001≤n,k≤100。

Solution

隔板法模板,数据较小直接加法递推求组合数就行了。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
using namespace std;
typedef long long ll;
typedef int itn;
//#define int long long
typedef pair<int, int>PII;
const int N = 2e3 + 7, mod = 1e6;
const double PI = acos(-1.0);int n, m, k;
int f[N][N];void init(int n)
{f[1][0] = f[1][1] = 1;for (int i = 2; i <= n; ++ i) {f[i][0] = 1;for (int j = 1; j <= n; ++ j) {f[i][j] = (1ll * f[i - 1][j - 1] + f[i - 1][j]) % mod;}}
}int main()
{init(N - 7);while(scanf("%d%d", &n, &k) != EOF && n + k) {printf("%d\n", f[n + k - 1][k - 1]);}return 0;
}

D、(P3197 [HNOI2008])越狱(减法原理,组合计数)

Weblink

https://www.luogu.com.cn/problem/P3197

Problem

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

答案对 100,003 取模。

1≤m≤108,1≤n≤10121\le m\le 10^8,1\le n\le 10^{12}1≤m≤108,1≤n≤1012

input

输入只有一行两个整数,分别代表宗教数 m 和房间数 n 。

Solution

注意输入的是 mmm 和 nnn …不然你连样例都过不去…

简单的组合计数问题。

问题可以转换为一排 nnn 个人,给每个人分配一个宗教。

相同宗教的会越狱,那么直接计算相同宗教的方案数比较难,因为要求相同的话,相当于需要给第一个人分配宗教1,相邻的第二个人也分配宗教 1,然后第二个人宗教1,此时第三个人宗教1…好难算,办法直接计算。数据贼大也不可能这样模拟,所以考虑减法原理,正难则反。

所以我们考虑先计算总方案数,减去相邻人员宗教不相同的方案数就是答案。

这个就很好做了。倒着做就是一个非常经典的组合计数问题了。即相邻的人不能相同的方案数。

首先考虑总方案数:

由于没有限制,则每个人都有 mmm 种选择,总方案数为 mnm^nmn 。

m * m * m   *   m = m ^ n
1   2   3  ...  n

然后计算相邻宗教不同的方案数:

m * m - 1 * m - 1   *     m - 1  = m * (m - 1) ^ n
1     2       3    ...     n

也就是限制了相邻的选择,即第一个人能选 mmm 种,第二个人不能与第一个人相同,有 m−1m-1m−1 种选择,第三个人同理。

注意读入要求以及数据范围。

可以欧拉降幂hhh但没什么用

Code

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <queue>
using namespace std;
typedef long long ll;
typedef int itn;
typedef pair<int, int>PII;
const int N = 2e5 + 7, mod = 100003;
const double PI = acos(-1.0);ll n, m;ll qpow(ll a, ll b)
{b %= mod - 1;ll res = 1;while(b) {if(b & 1) res = (1ll * res * a) % mod;a = (1ll * a * a) % mod;b >>= 1;}return res % mod;
}int main()
{scanf("%lld%lld", &m, &n);int ans = ((qpow(m, n) - m * qpow(m - 1, n - 1)) % mod + mod) % mod;printf("%d\n", ans);
}

E、(UVA12001) UVa Panel Discussion(组合计数、分类讨论)

Weblink

https://www.luogu.com.cn/problem/UVA12001

Problem

有 mmm 个国家的 nnn 个人来参加讨论,计划从这不超过300人的参赛者中选出一个小组。若选择三个人组成这个小组,则要求该组的三人必须是来自同一国家,或者必须来自三个不同的国家。若选择四个人组成这个小组,则要求该组的四个人中,必须至少存在三个人来自同一个国家或必须至少存在三个人来自三个不同的国家。问一共有多少种分组方案满足上述要求。

Solution

就硬算

Code

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>using namespace std;
typedef long long ll;
const int N = 5007;int n, m;
ll ans3, ans4;
ll num[N];void solve3(ll &ans)
{for(int i = 1; i <= m; ++ i) {ans += num[i] * (num[i] - 1) * (num[i] - 2) / 6;for(int j = i + 1; j <= m; ++ j) {for(int k = j + 1; k <= m; ++ k) {ans += num[i] * num[j] * num[k];}}}
}void solve4(ll &ans)
{//三个同一国家for(int i = 1; i <= m; ++ i) {ans += num[i] * (num[i] - 1) * (num[i] - 2) * (num[i] - 3) / 24;//四个ans += num[i] * (num[i] - 1) * (num[i] - 2) / 6 * (n - num[i]);}//三个不同国家for(int i = 1; i <= m; ++ i) {for(int j = i + 1; j <= m; ++ j) {for(int k = j + 1; k <= m; ++ k) {ans += num[i] * (num[i] - 1) / 2 * num[j] * num[k];ans += num[i] * num[j] * (num[j] - 1) / 2 * num[k];ans += num[i] * num[j] * num[k] * (num[k] - 1) / 2;}}}//四个不同国家for(int i = 1; i <= m; ++ i) {for(int j = i + 1; j <= m; ++ j) {for(int k = j + 1; k <= m; ++ k) {for(int l = k + 1; l <= m; ++ l) {ans += num[i] * num[j] * num[k] * num[l];}}}}
}int main()
{while(scanf("%d%d", &n, &m) != EOF && n + m) {memset(num, 0, sizeof num);for(int i = 1; i <= n; ++ i) {int x;scanf("%d", &x);num[x] ++ ;}ans3 = 0;ans4 = 0;solve3(ans3);solve4(ans4);printf("%lld %lld\n", ans3, ans4);}return 0;
}

F、(2014 ICPC Xian F)Color

Weblink

https://codeforces.com/gym/100548/submit

Problem

nnn 盆花排成一列用 mmm 种颜色涂,要求相邻颜色不同,且使用颜色数恰为k。求方案数膜1e9+7。

Solution

首先从 m 种颜色里选出 k 种备选颜色,方案数为 CmkC_m^kCmk​

乘法原理:对于第一盆花,有 k 种选择,对于之后的每一盆花, 为了保证不重复,只有 (k−1)(k-1)(k−1) 种选择, 方案数为 k×(k−1)n−1k\times (k-1)^{n-1}k×(k−1)n−1。但这时包含了许多使用颜色额数不足 k 的方案,需要容斥原理排除。 考虑从 k 种颜色里取 i 种涂色,方案数为 Cki⋅p(p−1)n−1C_k^i\cdot p(p-1)^{n-1}Cki​⋅p(p−1)n−1,结合容斥奇减偶加,可以得出:

总方案数
N=Cmk⋅k(k−1)n−1+∑i=2k−1(−1)iCki⋅i(i−1)n−1N=C_m^k\cdot k(k-1)^{n-1}+\sum_{i=2}^{k-1}(-1)^iC_k^i\cdot i(i-1)^{n-1} N=Cmk​⋅k(k−1)n−1+i=2∑k−1​(−1)iCki​⋅i(i−1)n−1

%https://www.cnblogs.com/Li-F/p/11894612.html

G、(2019 ICPC shanghai 网络赛 D) Counting Sequences I

H、(2019 ICPC nanjing B) Chessboard

G、(2019 ICPC nanchang C) And and Pair

https://blog.csdn.net/qq_44691917/article/details/103487986

https://www.cnblogs.com/LiuRunky/p/Prufer_Sequence.html

https://blog.csdn.net/qq_41661919/article/details/81676549

https://blog.csdn.net/so_so_y/article/details/79888085#comments_13484878

解题报告(五)组合计数(ACM / OI)超高质量题解相关推荐

  1. 【解题报告系列】超高质量题单 + 题解(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我新写的超高质量的题解和代码,题目难度不 ...

  2. 解题报告(八) prufer 序列与 Cayley 公式(ACM / OI)超高质量题解

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

  3. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  4. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  5. Codeforces Round #698 (Div. 2)(A ~ F)6题全,超高质量题解)【每日亿题】2021/2/4

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #698 (Div. 2)(A ~ F)6题全,超 ...

  6. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 解题报告(一)快速沃尔什变换FWT(ACM / OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  8. 解题报告 (五) Burnside引理和Polya定理

    Burnside引理 笔者第一次看到Burnside引理那个公式的时候一头雾水,找了本组合数学的书一看,全是概念.后来慢慢从Polya定理开始,做了一些题总算理解了.本文将从最简单的例子出发,解释Bu ...

  9. [精品]CSAPP Bomb Lab 解题报告(五)

    接上篇[精品]CSAPP Bomb Lab 解题报告(四) gdb常用指令 设置Intel代码格式:set disassembly-flavor intel 查看反汇编代码:disas phase_1 ...

最新文章

  1. window.event.srcElement
  2. 新手搭建阿里云FTP服务器
  3. 5G NGC — CAPIF 网络能力开放框架
  4. Python-random标准库知识小结
  5. 死磕 synchronized 底层实现
  6. Selenium自动写公众号文章
  7. Java代码中变量的特殊修饰符/修饰词/关键字
  8. [转载]虚拟机磁盘空间已满的发现和解决
  9. 内存分析工具 MAT 的使用
  10. (xy)+((x^y)1)求(245, 112)结果是多少
  11. JavaSE03: Arrays工具类的使用及简单数组算法
  12. window 快捷键
  13. android 色值(全)
  14. 使用WPS邮件合并功能和文档部件插入图片制作准考证
  15. 珍惜当下,路会慢慢走出来的
  16. errorC1083 无法打开源文件 c1xx
  17. Orcad Capture CIS出BOM表
  18. 单片微型计算机频率测量实验,毕业论文:频率计系统设计
  19. nsga 的java实现_Java – Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉运算符
  20. 浅谈进程地址空间与虚拟存储空间

热门文章

  1. 干货|深入浅出YOLOv5
  2. 教程 | OpenCV深度神经网络实现人体姿态评估
  3. 快速指南:使用OpenCV预处理神经网络中的面部图像
  4. 编写同时在PyTorch和Tensorflow上工作的代码
  5. 你知道怎么使用OpenCV检测篮球运动员吗?
  6. AI时代的领航者,智能电话机器人对市场的影响
  7. 阿里云首席架构师唐洪:拥抱开源的云端更具生命力
  8. eclipse怎样生成javadoc
  9. 2012-4-2 通过MdiParent设置窗体最前
  10. 树的分类,特性与遍历