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 大法:在关键位置打印中间变量的值,看是不是你以为的那样------这是算竞常用手段
  • 样例不过时,先确认读入格式对不对(多测、空格、换行)。
  • 程序没输出就崩溃,多半是数组越界或者数组开太大。
相关推荐
霍霍的袁4 小时前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven5 小时前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
程序猿编码5 小时前
告别改源码适配模型:纯 C++ 可配置 LLM 推理引擎,全格式全结构兼容
c++·大模型·llm·推理引擎
此生决int5 小时前
深入理解C++系列(20)——C++11(下)
开发语言·c++
郝学胜-神的一滴5 小时前
C++20模板元编程 07:吃透名称绑定与编译期递归核心原理
c++·程序人生·vs·模板元
S_WEAN6 小时前
【C++】STL - Vector类的模拟实现
c++
wuminyu6 小时前
HotSpot的轻量锁与膨胀后的ObjectMonitor状态重建原理
java·linux·c语言·jvm·c++
一只小透明啊啊啊啊6 小时前
Socket、AIDL、SOME/IP
c++·mcu
Tim_107 小时前
【LeetCode】338、比特位计数
c++·算法·leetcode