C++ 萌新语法入门篇

零壹程序设计竞赛协会

这篇学习路线只针对学习 C/C++ 的同学,其他语言的同学也可以按照给出的题单进行训练。第一次接触的同学,建议先看第六节把编译环境装好,再从第一节的题单开始。

一、训练题单(边学边刷,1-2 个月完成)

1. 洛谷入门题单

https://www.luogu.com.cn/training/list

这里主要有 6 个入门题单。如果觉得入门难度简单,可以只刷普及-难度的题目,掌握即可,无需全部刷完。

2. 牛客新手入门 130(知识点列得更全面)

https://www.nowcoder.com/problem/tracker#/problems

主要刷截图里圈出的部分就行,与上面同理,掌握即可。这个题单还配有视频讲解,就是有点口音。

二、C++ 与 STL、时空复杂度

对于想打算法比赛的同学,推荐用 C++。它是竞赛里唯一同时给到"够用的现成数据结构"和"够快的执行速度"的语言:STL 省掉你的实现时间,速度保证你的算法不被时限卡掉。C++ 里还有很多常用函数,比如 sort、max、min、abs、__gcd。

关于复杂度:一般 1 秒大约能执行 1 亿(1e8)次基本操作,所以算法要控制在约 1 亿次操作以内,超了就会超时。这里说的 1e8 是"操作次数",不是时间复杂度本身------时间复杂度是 O(n log n) 这类记号。

如果已经有 C 语言基础,可以直接速成 C++;还在学 C 语言的同学,如果确定要打算法竞赛,也可以直接找一个 C++ 速成课。我自己走的是 C 转 C++,下面是我当时用的材料:

  1. C 语言学到结构体就够了。我当时看的是翁恺老师的课程:https://www.bilibili.com/video/BV1dr4y1n7vA

  2. C 语言转 C++ 简单教程:https://www.bilibili.com/video/BV1UE411j7Ti

  3. 颢天笔记:算竞常用 C++ STL 用法:杂项 | 算竞常用 C++ STL 用法 - 颢天笔记

  4. 【算法入门】各类 STL 用法与时空复杂度:https://www.bilibili.com/video/BV1fqKgzbEg9

视频搭配笔记一起看效果更好。

三、竞赛常用骨架

下面三段骨架可以直接复制。第一段是 C 语言的,后两段是 C++ 的------建议从第二段开始用。

1. C 语言骨架

2. C++ 基础骨架

3. C++ 扩展骨架

四、比赛

觉得语法学得差不多了,推荐先在洛谷平台打一些入门比赛 div4(如果没有找到,可以 vp 之前的比赛),后面应该也会出一些校内练习赛给大家训练。

五、刷题策略

  • 总路线(当语法和基础算法与数据结构(后续会出算法入门篇)学会后):打各大 OJ 平台比赛(牛客、CF、AtCoder)→ 补题(不用全补,根据自身水平)→ 学习比赛里不会的算法(因为算法非常多,不可能一下全学会,当然也有很多没有必要学的算法,如果你的目标是acm就另说了) → 找对应的专项练习(选略高于当前水平的题)→ 循环往复。
  • 比赛前一个月要针对性训练:码蹄杯就写往年真题;天梯赛去 PTA vp 历年套卷;ACM 同理。
  • 一道题超过 30 分钟没有思路就可以看题解(有一定经验后自行决定这个时间)。可以在 AI 的引导下独立完成,当然也可以直接问我或鲁莹莹和朱镇江这两位学姐学长。但一定要亲自用代码实现一遍,确保掌握全部细节,然后回想赛时思路为什么没有 AC、下次遇到该怎么办------否则补题没有多大意义。

最后和大家说一句:想要学好算法,取得成绩,没有捷径,唯有大量刷题。

六、编译环境搭建与第一次提交

1. 装编译器

写 C/C++ 需要 g++。Windows 上最省事的方式是装 w64devkit 或 MinGW-w64(下载解压即可,把 bin 目录加到 PATH)。装好后打开命令行,输入:

g++ --version

能打印出版本号(例如 g++ (GCC) 15.2.0)就说明装好了。

2. 装编辑器

推荐 VS Code,再装一个插件 CPH(Competitive Programming Helper)------它可以按题目网址一键抓样例、跑测试,省掉手敲样例的功夫。如果你已经用顺了 Dev-C++,那个也够用。

3. 验证环境

把下面这段存成 a.cpp:

#include <bits/stdc++.h>

using namespace std;

int main() {

cout << "hello" << "\n";

return 0;

}

然后在命令行里编译并运行:

命令1:g++ a.cpp -o a -std=c++17 -O2

命令2:.\a.exe

看到输出 hello 就说明环境通了。

4. 从写到交

在 OJ(比如洛谷)上找到题目 → 在编辑器里写好代码 → 本地编译、用题目给的样例测一遍 → 复制代码 → 在题目页面选语言(C++11 或 C++14,17)→ 粘贴 → 提交。

提交后常见的结果:AC 表示通过;WA 表示答案错误;TLE 表示超时(算法太慢);RE 表示运行错误(通常是数组越界或数组开太大爆栈);CE 表示编译错误。

5. 调试

  • printf 大法:在关键位置打印中间变量的值,看是不是你以为的那样------这是算竞常用手段
  • 样例不过时,先确认读入格式对不对(多测、空格、换行)。
  • 程序没输出就崩溃,多半是数组越界或者数组开太大。
相关推荐
SWAGGY..41 分钟前
【C++进阶】:(10)哈希表的原理与实现——从哈希函数到哈希桶
c++·哈希算法·散列表
码匠许师傅42 分钟前
【C++三方组件】redis-plus-plus:现代 Redis C++ 客户端
java·c++·redis
wuminyu1 小时前
stackChunkOop内部结构与GC屏障的配合工作原理剖析
java·linux·c语言·jvm·c++
小π军1 小时前
C 和 C++ 是否都支持函数的重载?
java·c语言·c++
烟花落o1 小时前
C++ 从 C 到进阶 ④:类和对象(下)—— 构造函数进阶、static、友元与内部类
c++·类和对象·初始化列表·匿名对象·内部类·友元函数·static成员函数
stellanke1 小时前
工业化C++:3. 继承、虚函数与运行时多态:从水果加工到日志策略设计
开发语言·c++
垆边人似月.1 小时前
华为题:最多可以参加的会议数目
数据结构·c++·算法
xiangyun611 小时前
C++ list 模拟实现(一):手撕双向链表,从节点到迭代器
数据库·c++·算法·链表·stl·list
别动我齐刘海11 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
程序员老陆11 小时前
C++ std::promise深度解析
c++·程序设计