GESP2026年6月认证C++八级( 第二部分判断题(1-10))精讲



第1题 加法原理

若一项任务可从两种互斥的方案中选择一种完成,其中方案A有a种做法,方案B有b种做法,则总做法数为a+b。

答案:正确(√)


1、为什么?

(1)这是排列组合最基础的两大原理之一。

假设今天放学有两种方式:


(2)方案A:

骑自行车

有3辆可以骑


(3)方案B:

坐公交车

有2条线路


(4)注意:

骑车和坐公交不能同时进行。


(4)因此:

复制代码
总方案
=
3+2
=
5

2、这就是

加法原理(分类计数原理)


3、记忆口诀

互斥(只能选一个) → 相加。



第2题 圆排列

n个不同元素围成一圈,只把旋转视为相同,翻转不同,方案数为(n−1)!。

答案:正确(√)


1、为什么?

(1)排成一圈时:

例如

复制代码
ABCDE

旋转以后

复制代码
BCDEA

视为没有区别。


(2)所以固定一个人。

剩下

复制代码
n-1

个人排列。

因此:

复制代码
(n-1)!

2、注意陷阱

(1)如果题目说:

旋转、翻转都一样。


(2)那答案就是:

复制代码
(n-1)!/2

这是考试喜欢出的坑。



第3题 可重复组合

从n个不同元素中可重复地选k个且不考虑顺序,方案数为C(n+k,k)。

答案:错误(❌️)


1、这是经典:

插板法(Stars and Bars)


2、例如:

(1)三种水果:

苹果

香蕉

橘子

可以买4个。


(2)可以买:

复制代码
苹果 苹果 苹果 苹果

(3)也可以买:

复制代码
苹果 香蕉 香蕉 橘子

......

公式就是:

也是

两种写法一样。



第4题 杨辉三角

1、杨辉三角DP转移公式:

答案:错误(❌️)


2、这就是

杨辉三角递推

(1)例如:

复制代码
      1
    1   1
  1   2   1
1   3   3   1

为什么3出现?


(2)因为:

复制代码
1+2=3

每一个数字:

都是:

左上 + 右上。

所以组合数DP全部来自这里。



第5题 快速幂

快速幂可以在O(logn)时间计算aⁿ。

答案:正确(√)


1、很多同学会写:

复制代码
long long ans=1;
for(int i=1;i<=n;i++)
    ans*=a;

这是:

复制代码
O(n)

2、快速幂:

不断平方。


3、例如:

复制代码
3^13

不用乘13次。


(1)指数:

复制代码
13

↓

6

↓

3

↓

1

↓

0

不断减半。


(2)因此:

时间复杂度:

复制代码
O(logn)

4、记忆口诀

指数减半。

底数平方。

奇数乘答案。



第6题 Dijkstra

只要没有负权环,Dijkstra就一定正确。

答案:错误(×)


1、这是八级经典陷阱。

很多同学容易和Bellman-Ford混。


2、Dijkstra要求

必须:

所有边权非负。

哪怕只有:

复制代码
一条负边

都有可能算错。


3、例如:

复制代码
A→B =2

A→C =5

C→B =-10

(1)真正最短:

复制代码
A→C→B

=-5

(2)但Dijkstra可能先确定B,

以后就不会修改。

因此:

错误。


4、谁能处理负边?

Bellman-Ford

SPFA

Floyd

都可以。



第7题 最小生成树唯一

连通图所有边权互不相同,则MST唯一。

答案:正确(√)


1、为什么?

(1)Kruskal排序以后:

边权:

复制代码
1

2

3

4

没有任何两条边一样。


(2)所以:

每一步:

选谁

没有争议。

因此:

最终树唯一。


2、如果:

有很多

复制代码
权值一样

可能出现:

很多种MST。



第8题 圆内判断

判断是否在圆内,可以比较x²+y²和r²,不需要开平方。

答案:正确(√)


1、这就是前面选择题第8题。

(1)因为:


(2)平方以后:


2、比赛里经常这样写。

因为:

  • 更快

  • 没误差



第9题 二分答案

check(x)不满足单调性,也一定可以二分答案。

答案:错误(×)


1、这是整个二分答案最重要条件。

为什么?

(1)例如:

复制代码
答案:

1 2 3 4 5 6

(2)check:

复制代码
F

F

T

T

T

T

(3)这就是:

单调。

二分才能找。


2、如果不满足单调性:

就不能二分。



第10题 归并排序

归并排序是一种稳定排序,复杂度O(nlogn)。

答案:正确(√)


1、归并排序:

(1)每层:

复制代码
O(n)

(2)高度:

复制代码
logn

(3)因此:

复制代码
O(nlogn)

2、为什么稳定?

(1)例如:

复制代码
5A

5B

两个5。


(2)归并时:

如果相等,

总是:

先放左边。

于是:

A仍然在B前面。


(3)所以:

相对顺序不会改变。

这就是:

稳定排序。


本套判断题总结

题号 答案 核心考点 是否高频
1 加法原理(分类计数) ⭐⭐⭐⭐
2 圆排列公式 ⭐⭐⭐⭐
3 × 可重复组合(插板法) ⭐⭐⭐⭐⭐
4 × 杨辉三角递推 ⭐⭐⭐⭐⭐
5 快速幂 O(logn) ⭐⭐⭐⭐⭐
6 × Dijkstra不能处理负边 ⭐⭐⭐⭐⭐
7 边权互异 ⇒ MST唯一 ⭐⭐⭐⭐
8 圆内判断比较平方 ⭐⭐⭐
9 × 二分答案必须满足单调性 ⭐⭐⭐⭐⭐
10 归并排序稳定且 O(nlogn) ⭐⭐⭐⭐⭐

请重点记忆下面五句话:

  1. 互斥事件用加法原理,独立步骤用乘法原理。

  2. Dijkstra 只能处理非负权图,遇到负边就不能保证正确。

  3. 二分答案的前提是 check() 函数具有单调性。

  4. 线性筛能够保证每个合数只被它的最小质因子筛去一次,因此时间复杂度为 (O(n))。

  5. 归并排序既是稳定排序,时间复杂度也是 (O(n\log n))。


相关推荐
nianniannnn2 小时前
c++复习自存--流、异常处理、多线程与C++工程规范
开发语言·c++
知无不研3 小时前
缺省参数与缺省函数的区别
c++·语法
csdndenglu5 小时前
Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据,无复杂要求时可替代VTK
开发语言·c++·图形渲染·3d渲染
^yi6 小时前
【C++】String 类
开发语言·c++
chh5636 小时前
C++--vector
开发语言·c++·学习·算法
zmzb01037 小时前
C++课后习题训练记录Day154
数据结构·c++·算法
殳翰16 小时前
下服务器端开发流程及相关工具介绍(C++)
开发语言·c++
青瓦梦滋16 小时前
协议定制/序列化-反序列化(Linux视角)
linux·服务器·网络·c++
山登绝顶我为峰 3(^v^)320 小时前
C/C++ 交叉编译方法
java·c语言·c++