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))。


相关推荐
拳里剑气12 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
ysa05103013 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
aramae15 小时前
C++ IO流完全指南:从C标准库到C++流式编程
服务器·c语言·开发语言·c++·后端
_wyt00115 小时前
c++里的族谱:树
c++·
@三十一Y16 小时前
C++:AVL树实现
c++
haolin123.17 小时前
类和对象(上)
开发语言·c++
ShineWinsu17 小时前
对于Linux:传输层协议UDP原理的解析
linux·c++·面试·udp·协议·传输层·计算机系统
LingzhiPi17 小时前
零知派ESP32--AS5600磁吸旋钮音量控制器
c++·单片机·嵌入式硬件
小保CPP17 小时前
OpenCV C++车型识别1-图像预处理
c++·人工智能·opencv·计算机视觉
库克克17 小时前
【C++】C++11 包装器function 与 绑定器 bind
开发语言·c++