Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
cba7a78
feat: add 2018fall/lab4-1159
Certseeds Sep 20, 2025
15a8151
feat: 添加 2018fall/lab4-1039
Certseeds Sep 20, 2025
3d7d1be
feat: 添加 2018fall/lab4-1161
Certseeds Sep 20, 2025
0ae4b8e
feat: add 2018fall/lab4-1162
Certseeds Sep 20, 2025
f309dfd
feat: 添加 2018fall/lab4-1164
Certseeds Sep 20, 2025
8687c5d
feat: add 2018fall/lab4-1165
Certseeds Sep 20, 2025
4197a37
build: 禁用 windows 远程构建
Certseeds Sep 21, 2025
1177998
feat: 添加 2018fall/lab4-1163 以及 2018fall/lab4 整体评价
Certseeds Sep 21, 2025
ce54a79
feat: add 2018fall/lab5-1145
Certseeds Sep 21, 2025
7585420
feat: add 2018fall/lab5-1146
Certseeds Sep 21, 2025
9952972
feat: 添加 2018fall/lab5-1047
Certseeds Sep 21, 2025
ce97628
feat: 完成 2018fall/lab5-1148
Certseeds Sep 21, 2025
1b4c1bf
feat: 添加 2018fall/lab5-1149
Certseeds Sep 21, 2025
24e6a61
feat: add 2018fall/lab5-1150
Certseeds Sep 21, 2025
26901af
feat: add 2018fall/lab5-1151
Certseeds Sep 21, 2025
2c6fa16
feat: 完成 2018fall/lab5 整体评价
Certseeds Sep 21, 2025
66ef182
feat: add 2018fall/lab6-1152
Certseeds Sep 21, 2025
86e4e18
feat: add 2018fall/lab6-1158
Certseeds Sep 21, 2025
3cff56f
feat: 添加 2018fall/lab6-1153
Certseeds Sep 21, 2025
95646e0
feat: add 2018fall/lab6-1154
Certseeds Sep 21, 2025
18cbed4
feat: add 2018fal/lab6-1155
Certseeds Sep 21, 2025
8098530
feat: 添加 2018fall/lab6-1156
Certseeds Sep 21, 2025
9a44bea
feat: add 2018fall/lab6-1157
Certseeds Sep 21, 2025
8017cff
feat: 完成 2018fall/lab6评论
Certseeds Sep 21, 2025
5726d76
feat: add 2018fall/lab_bonus_1184
Certseeds Sep 21, 2025
707a752
feat: add 2018fall/lab_bonus-1185
Certseeds Sep 21, 2025
9770aa7
feat: add 2018fall/lab-bonus-1186
Certseeds Sep 21, 2025
7d786f9
feat: add 2018fall/lab-bonus-1187
Certseeds Sep 21, 2025
567c181
feat: add 2018fall/lab-bonus-1188
Certseeds Sep 21, 2025
f235944
feat: 完成 2018fall/lab-bonus 总结
Certseeds Sep 21, 2025
1e1cc3c
feat: 完成 2018fall/lab7
Certseeds Sep 21, 2025
f77bafd
feat: add 2018fall/lab8-1075
Certseeds Sep 21, 2025
2271ba5
feat: add 2018fall/lab8-1124
Certseeds Sep 22, 2025
7fa0621
feat: add 2018fall/lab8-1125
Certseeds Sep 22, 2025
d38a138
feat: 添加 2018fall/lab8-1127
Certseeds Sep 22, 2025
db77db0
feat: add 2018fall/lab8-1128
Certseeds Sep 23, 2025
f2fc9ba
feat: add 2018fall/lab9-1176
Certseeds Sep 23, 2025
7377789
feat: add 2018fall/lab9-1177
Certseeds Sep 24, 2025
8c824c7
feat: add 2018fall/lab9-1178
Certseeds Sep 24, 2025
f554469
feat: add 2018fall/lab9-1077
Certseeds Sep 24, 2025
722fbe9
docs: remove useless description
Certseeds Sep 24, 2025
995382f
feat: add 2018fall/lab9 1079 1080 1179
Certseeds Sep 25, 2025
fadeb07
feat: add 2018fall/lab9 1180 1181 1182
Certseeds Sep 26, 2025
76af96f
feat: add 2018fall/lab8-1130, lab9-1083, lab9-1085
Certseeds Sep 27, 2025
e25c30a
docs: reformat docs, 更新 2018fall/README.md
Certseeds Sep 27, 2025
7b8e14e
feat: update actions
Certseeds Sep 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 4 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
*.ps1 text eol=crlf

# Java sources
*.java text diff=java
*.java text diff=java
*.cpp text diff=cpp eol=lf
*.gradle text diff=java
*.gradle.kts text diff=java

Expand Down Expand Up @@ -44,3 +45,5 @@
*.so binary
*.war binary
*.jks binary

*.csv text diff=csv eol=lf
6 changes: 3 additions & 3 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest ,windows-latest ]
os: [ ubuntu-latest ]
steps:
- name: checkout code
uses: actions/checkout@v5
Expand All @@ -36,7 +36,7 @@ jobs:
- name: Use java and javac
run: javac -version; java -version

- name: windows clean build test
- name: ubuntu clean build test
run: mvn clean compile test

# This workflow contains a single job called "build"
Expand Down Expand Up @@ -79,7 +79,7 @@ jobs:
!.git/**
!**/.git/**
if-no-files-found: error
# 压缩只执行一次(由 upload-artifact 完成)无需预先 zip
# 压缩只执行一次(由 upload-artifact 完成); 无需预先 zip

# Runs a set of commands using the runners shell
- name: tree
Expand Down
45 changes: 45 additions & 0 deletions 2018fall/AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
## 注意事项

0. 使用 zh-CN 思考, 分析, 回答.
1. 使用 JDK11 语法, 尽量使用现代数据结构, 尽量使用final var不可变变量
2. 尽量遵守读-处理-输出分离的原则
3. 不使用任何中文标点

+ 以使用 `"` 为荣, 以使用 `“`, `”` 为耻
+ 以使用 `'` 为荣, 以使用 `‘`, `’` 为耻
+ 以使用 `,` 为荣, 以使用 `,` 为耻
+ 以使用 `.` 为荣, 以使用 `。` 为耻
+ 以使用 `:` 为荣, 以使用 `:` 为耻
+ 以使用 `;` 为荣, 以使用 `;` 为耻
+ 以使用 `!` 为荣, 以使用 `!` 为耻
+ 以使用 `?` 为荣, 以使用 `?` 为耻

> 注意给英文字符留出一个空格的空白

4. 禁止使用 `**` 加强符号

## 定义操作

1. 定义对README进行的预处理

+ README.md内 `Description` 应该为 `## `, Input, Output, Sample Input, Sample Output, HINT 等均改写为 `### `
+ `Sample Input` `Sample Output`内里面的输入输出, 用 ``` log ``` 包裹
+ 注意去除/替换部分非中英文的字符
+ 只进行格式整理, 不对内容进行编辑

2. 定义解答流程

+ 根据题目描述, 以及输入输出文件 data.in, data.out, 按照JDK11语法, 并遵守读-处理-输出分离的原则, 重写 Main.java
+ 使用默认的快读类
+ 读取方法 reader 使用快读类, 将读取数据抽象为类, 并传递到处理函数cal
+ 处理函数 cal 内部处理, 并将结果传递给输出函数 output
+ 输出函数 output 接受结果, 尽可能地优化输出
+ 注意不要使用 `if (i < results.size() - 1) { System.out.print('\n'); } ` 这种方式, 最后一个也要输出换行
+ 使用 `System.out.print('\n')` 来表示换行
+ 不需要使用 `java.io.PrintWriter`等方式实现快写
+ 使用题目约束, 在 Main.java 的 reader 内部加入 assert 判断, 并尽量对每一个 assert 判断中的 case 添加括号
+ example: `assert ((0 <= x) && (x <= 100));`

3. 执行测试的命令行操作: `mvn -pl .\2018fall\lab_{}\lab_{}_{} -am test`

4. 在 README.md 中说明思路
136 changes: 136 additions & 0 deletions 2018fall/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# 2018fall llm通关总结

> Focus. Fight. Win
>
> Ash, APEX Games

这个目录中存放着2018年秋季学期, 全部公开题目的题解. 从welcome-lab 到 lab9, 前面几个手写, 2025年的全部由llm生成.

2025年9月的ICPC竞赛中, [Gemini](https://deepmind.google/discover/blog/gemini-achieves-gold-level-performance-at-the-international-collegiate-programming-contest-world-finals/)和 GPT都取得了令人满意的结果, 分别是 10/12 和 12/12 (refer: <https://simonwillison.net/2025/Sep/17/icpc/>).

Gemini使用了专有的Gemini 2.5 Deep Think 的高级版本, GPT 方面则是现有的GPT-5 (可能是GPT5-Codex?)和一个实验性推理模型一起工作.

## 模型如何训练出了这么强的推理能力

2023年的GPT4, 虽然谈吐已经很似人了, 但是codeforces上的分数几乎无法击败任何经过训练的人类选手, 只能拿到 400 分. 2024年的 O1 就可以触及 1900分, 到了现在已经立于顶端, 几乎无法被击败, 这是如何训练出来的?

算法题输入输出非常明确, 输入一份题目, 一些用例, 输出一段代码. 这段代码可以在很短时间内通过多重测试, 给出通过或者不通过的反馈. 宽松一些的话, 还可以反馈 TLE/MLE/编译失败等反馈. 这就很有利于迭代方式进行提升

整体训练过程类似于老式柴油发动机: 需要手摇启动, 启动之后就能输出强劲马力. 一个可能的步骤如下

0. 首先得有一个底座模型, 比如Gemini-2.5-pro
1. 人类选手通过对问题进行分析, 预先将一部分问题写出分析步骤, 并写出对应的代码.
2. 将步骤一中的 `题目, 用例, 思考过程, 代码` 对基础模型进行微调, 使其具备基础的算法思考能力, 能够在强化学习中入门, 不至于只能产出失败用例
3. 评估模型的算法能力, 在算法边界之上的小范围内选定新的题目
4. 进入强化学习步骤, 将题目用例送入模型, 将产出的代码测试验证, 并通过验证思路能否被与输出的代码匹配(通过相同的prompt, 送入题目, 用例, 思路, 观察能否输出正确的结果等), 对输出的代码风格进行评估等手段, 将产出的思维链-代码产物合成为一个整体 reward
5. 利用reward更新策略, 并跳回到第三步.

这个过程中, 可以在每个过程中reward较高的结果保存下来作为高质量的合成训练数据, 供后续预训练等步骤使用. 或者直接使用最后一个版本, 对过程中的所有问题进行再次解答, 产出高质量的合成数据.

## 人类如何模拟这个过程来训练自己

### 建立基础能力

+ 目标: 对一个领域内的问题有基础的解答能力
+ 方法: 通过leetcode等平台, 借助难度标注等方式, 从简单到困难, 通过快速的观察题目-得出思路-比对答案的循环, 得到对问题的抽象能力, 以及一些典型问题的处理方式

> DSAA这门课提供的题目可不太适合"入门", 你得从其他平台完成0-1这一步.

### 自我微调

+ 目标:把常见模式内化为可复用技能(例如二分、贪心、图论模板、并查集使用场合).
+ 方法:把题库按题型组织, 针对每个题型做集中练习: 先做 5-10 道相似题, 要求用不同变形/优化策略解决; 随后总结模板并形成"解题卡"与常用代码片段.
+ 输出物: 解题模板集、常见边界处理 checklist.

> 这一步有人担心遇到菱形依赖问题: 我是否会和其他人参考了相同的代码库?
>
> 如果直接对DSAA问题进行参考, 那自然是风险极高, 但是如果对经典问题进行参考, 从多个经典问题中汲取一段一段的思路, 那风险就降低很多了.

### 自动化测试

+ 目标: 把本地测试尽量自动化, 形成快速反馈回路.
+ 方法: 为每道题准备多组测试: 样例、随机生成的弱覆盖用例、以及针对边界的极端用例. 构建本地的自动测试脚本. 固化测试用例组织方式.
+ 产出: 高效的用例生成能力, 修改功能后快速测试的能力.

本质上看到题目后进入的是下面的循环

1. 读题目写代码,
2. 测试代码是否通过所有用例, 如果不通过, 跳回到1
3. 通过所有用例, 提交到OJ, 如果不通过, 构造更多测试用例, 并跳回到1
4. 如果通过, 则可以总结思路, 抽象代码为库

这一步中若能自动化步骤2, 就能极大的加速整个循环的速度.

### 人类偏好与同行评审(对应 RM 数据)

+ 目标: 引入主观质量判断(代码可读性、简洁性、思路清晰度)并获得外部反馈.
+ 方法: 加入学习小组或代码复审圈子: 定期互评彼此的题解, 采用 pairwise 比较(A 更优于 B)来总结偏好并讨论改进点. 也可以在社区(如 Code Review 频道)请求反馈.
+ 输出物: 同行评审记录、改进建议清单.

> [!NOTE]
>
> 注意不要引入压行等和软件工程相违背的风格

### 资源管理与节奏

+ 每日训练时间推荐: 1-3 小时(视学业/工作负担);

> [!NOTE]
>
> 边际收益会递减, 切换到另外的领域去获取更大的综合收益.

+ 标注与校验: 把重要的思路标注为"高价值", 定期复盘, 可以通过博客/markdown文档等方式进行沉淀.

## 这个模板仓库加速了什么?

本仓库的目标是把个人刷题与题目工程化、可复用化, 缩短"写-测-改-提交-复盘"的反馈回路, 具体体现在下面几点:

### 每个题目有独立目录

题目放在独立的子目录下, 目录内可以存放题目描述 (中/英)、个人翻译、思路笔记、版本迭代的代码以及特殊说明. 这样做的好处是: 不再需要频繁打开网页查题目, 方便离线阅读与长期积累, 同时便于把题解和注释作为学习资料分享或归档.

> 有些题目搞一大段描述, 不分段也就罢了, 题目描述还是张图片, 内部恨是吧.
>
> <https://acm.sustech.edu.cn/onlinejudge/problem.php?cid=1039>

### 在 IDE 与命令行上可通过 JUnit 快速跑通所有用例

每个题目配套的 `Main` 类和 `test` 目录下的 JUnit 测试允许你在 IDE (如 IntelliJ) 里一句 Run 即可执行全部样例. 也可以在命令行通过 `mvn test` 或 `mvn -Dtest=... test` 快速执行, 用最短的时间得到反馈 (通过/TLE/异常等), 加快本地迭代速度.

> code-agent 对命令行执行是强依赖, 单靠复制粘贴比对输出有点太繁琐了

### 统一的测试用例管理

仓库对用例做了统一命名与分组管理: 把"预期输入" (input)、"预期输出" (expected)、以及运行时产生的"测试输出" (actual)分别归档并以规范化命名存放 (例如 `01.data.in`, `01.data.out`, `01.test.out`). 这种做法便于把高质量的用例共享与复用.

### 使用 Maven/POM 简化提交到 OJ 前的改名与构建流程

提交到许多 OJ 需要把类名或包名改为特定格式(例如 `Main`), 或者只上传单个源文件. 仓库通过 `pom.xml` 和简单的脚本约定, 能把项目打包、按需生成单文件提交版本或替换 `Main` 名称, 免去每次手动重命名/复制的繁琐操作, 从而加速"本地通过->提交->得分"的循环.

### module 隔离与长期积累(把库代码与测试分离)

通过模块/目录结构把公共库 (如自实现的数据结构、模板方法)放在 `src` 中, 把单元测试与题目驱动放在 `test` 中. 这样既保持了代码的可维护性, 也方便把好用的手写数据结构逐步积累成可复用的工具箱, 未来可以在新题中直接复用、单测或优化.

### In conclusion

总之, 该模板把"写题"和"工程化测试/复盘"结合起来, 目标是用工程化的手段把题目练习变成可重复、可追溯、可分享的学习循环, 显著提高个人刷题与总结的效率.

## LLM工具

本次使用了三种工具

### GitHub Copilot

GitHub 的学生包中 <https://github.com/education/students> 提供了免费的 Copilot Pro, 每月三百次高级调用, 实测下来GPT5-Mini这个免费调用的模型能够秒杀easy/middle问题, 1x费率的高级模型可以通过几次迭代解决hard问题.

GitHub Copilot还可以登录 `opencode auth login`, 用Copilot的额度体验cli

### Gemini-cli

使用方式参考 <https://blog.certseeds.com/2025/connect_gemini_cli.html>

整体上来说不太满意, 虽然免费额度很高(一天一千次对话), 但是gemini-cli进行多轮对话并不能显著的提高coding能力, 经常能给出基础N^2实现, 但是无法成功的优化出时间复杂度达到预期的产物. 好消息是工具调用能力挺强, 可以产出大量的基础测试用例, 通过基础实现给出正确的输出, 供优化产物调试用.

### GPT-5 chatroom

一些非常困难的问题, gemini/opus均无法得出正确的结论, 反而是GPT5能够在思考几分钟之后得出结论, 确实非常强, 可以通过 openrouter 的 chatroom 获取, 便宜大碗.
4 changes: 2 additions & 2 deletions 2018fall/lab_2/lab_2_1133/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ SPDX-License-Identifier: CC-BY-NC-SA-4.0

## 解法1

读完题目, 每一个订单对应的是对一个区间做修改所以我们可以用线段树来维护这个区间的修改
读完题目, 每一个订单对应的是对一个区间做修改, 所以我们可以用线段树来维护这个区间的修改.

我们需要的操作有
1. 更新某个位置上的值, 用于初始化
2. 更新一个区间的所有值, 用于每一个操作
3. 获取一个范围的最小值 用于判断到最后是否可行.
3. 获取一个范围的最小值, 用于判断到最后是否可行.

把从sj到tj天订dj个房间, 翻译成: 给sj到tj的区间内, 每个值都减少dj.
之后每次检查区间最小值是否小于0,小于0则不可行.
Expand Down
2 changes: 1 addition & 1 deletion 2018fall/lab_2/lab_2_1136/src/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public static List<Integer> cal(List<one> nums) {
while (begin < end) { // 还是bisect
final int mid = (end - begin) / 2 + begin;
final int result = cal(one, mid);
// 可以认为是在[begin,end)间, 只有两个值一个-1一个1, 要寻找的是最左边的一个1
// 可以认为是在[begin,end)间, 只有两个值, 一个-1, 一个1, 要寻找的是最左边的一个1
if (result == -1) {
begin = mid + 1;
} else if (result == 1) {
Expand Down
2 changes: 1 addition & 1 deletion 2018fall/lab_3/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ SPDX-License-Identifier: CC-BY-NC-SA-4.0

## 1140-1144

这两个题目非常有趣,一个是合并另一个是微分(换句话讲, 求导)
这两个题目非常有趣,一个是合并, 另一个是微分(换句话讲, 求导)

最难的点是把多项式用合理的数据结构存起来, 滤掉无效项, 给输出出来. 如果设计的好, 这两个代码数据结构可以复用,输出可以复用.

Expand Down
2 changes: 1 addition & 1 deletion 2018fall/lab_3/lab_3_1142/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Wrong Anseer

### part2

重新审题, `to simplify, the strength of the n horses is a permutation of 1 to n`, 说明只是一个{1,2,...,n-1, n}的排列,而不是顺序的.
重新审题, `to simplify, the strength of the n horses is a permutation of 1 to n`, 说明只是一个{1,2,...,n-1, n}的排列,而不是顺序的.

这样的话就不是有序的数组了, 不能直接取值来做判断. 也不能累乘, 第一想法是搞一个优先队列,

Expand Down
77 changes: 77 additions & 0 deletions 2018fall/lab_4/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# 2018fall-lab4

## Stack And Queue

+ [x] problem A: lab_4_1159
+ [x] problem B: lab_4_1039
+ [x] problem C: lab_4_1161
+ [x] problem D: lab_4_1162
+ [x] problem E: lab_4_1163
+ [x] problem F: lab_4_1164
+ [x] problem G: lab_4_1165

## 总体评价

> 这套题目的设计者, 似乎不是想教会学生什么, 而是想告诉他们"你们还有多少东西不会". 对于一个刚学完基础编程, 对"时间复杂度"只有模糊概念的学生来说, 这次实验的体验曲线大概是这样的:
> 1. A 题: 虚假的希望. "哦, 好像不难, 我能做出来!"
> 2. B 题: 进入正轨. "这才是课上讲的栈, 逻辑有点绕, 但总算过了."
> 3. C/D/E 题: 思维的挑战. "为什么会 TLE? 我的逻辑没错啊? 是不是有什么巧妙的办法?"
> 4. F/G 题: 彻底绝望. "这代码也太复杂了!"

---

## 各题目分析

### 问题 A

题面: 在一个字符串中寻找 "lanran" 作为子序列.

这是所有题目中最"仁慈"的一个, AC 率最高 (约 31.6%). 它甚至不是一个栈或队列问题, 只是一个简单的字符串遍历.

### 问题 B

题面: 经典的三种括号 `()[]{}` 匹配问题.

真正的栈应用入门题, 完全符合教科书的经典模型. AC 率约为 20.3%, 显著的 WA 和 RE 数量说明, 即便是经典问题, 学生在处理逻辑细节和边界情况时依然会遇到麻烦.

### ⛰️ 问题 C, D, E: 算法思维的试金石

这三道题开始脱离纯粹的数据结构模板, 转向对特定算法模型的考察, 是区分学生思维能力的关键.

C 题 (`lab_4_1161`, 组合计数): 要求在 `O(n)` 时间内解决一个组合计数问题. 暴力解法会轻易导致 TLE, 迫使学生思考双指针/滑动窗口等优化技巧.
D 题 (`lab_4_1162`, 迷宫寻路): 一个有趣的模拟题, 需要通过全排列来暴力枚举所有可能的方向映射, 考察了代码的组织和模拟能力.
E 题 (`lab_4_1163`, 古老的蜘蛛牌): 用 `n <= 300,000` 的数据规模, 将一个看似简单的模拟题, 变成了对栈+贪心 `O(n)` 解法的硬性考察.

### 👹 问题 F (`lab_4_1164`) & G (`lab_4_1165`): 复杂度的终极考验

这两道题是本次实验的"劝退"核心, 它们不仅要求最优的时间复杂度, 还对代码实现和性能细节提出了极高要求.

F 题 (矩阵表达式求值):

这是本次实验最"阴险"的题目. 它将两个复杂的知识点 (中缀表达式求值 + 矩阵运算) 结合在一起. 学生不仅要写对双栈算法, 还要正确实现矩阵的各种运算.

`submit.csv` 中惊人的提交次数 (2841次) 和海量的 RE/PE/WA

G 题 (最小/最大栈):

`n <= 400,000` 的操作次数, 要求在每次 `pop` 后 O(1) 返回栈内最大减最小值. 这是一道考察"最小/最大栈" (使用辅助栈) 的模板题.

它不仅考察了特定的数据结构设计, 还因为海量数据和 Java 的装箱/拆箱性能问题, 给学生上了关于底层性能优化的深刻一课.

---

## 总结性批判

难度设计断层严重: 从基础的字符串和栈应用, 直接跳跃到需要双指针、贪心、高级数据结构设计 (如最小/最大栈) 和复杂模拟的难题, 中间缺少了足够的过渡.

过于强调"竞赛思维": 整套题目的设计思路, 尤其是对时间复杂度的极致压榨, 完全是算法竞赛 (ACM/ICPC) 的风格. 这对于旨在培养大多数学生基本编程素养的常规课程来说, 目标可能出现了偏差.

考察范围过广: 一次实验同时考察了字符串、栈、队列、表达式求值、矩阵、贪心、双指针、高级数据结构设计等大量知识点, 并且要求极高的实现精度, 这对学生的消化和吸收能力是巨大的挑战.

---

## 结论

> 这套题目作为选拔性测试是极其成功的, 它能精准地筛选出那些具有算法天赋、思维缜密、基础扎实的学生.
>
> 但作为一次面向全体学生的'教学', 它在引导和启发方面的作用是负面的. 可能会打击大部分学生的学习热情, 而非激发他们的兴趣.
Loading