Skip to main content

小贴士

CP 相关的一些网站平台、实用工具,以及编译相关的一些注意事项。

网站平台(算法类)​

OI-wiki​

国人维护的最大规模编程竞赛知识站点。

CP Algorithms​

主要内容为E-Maxx的英文翻译,也有部分原创内容。

VISUALGO​

提供了多种基本算法和数据结构的可交互动态展示。非常值得一看。

网站平台(竞赛类)​

Codeforces​

目前全球范围内每次比赛参加人数最多的竞赛平台。除了比赛和题库外,在博客和讨论区也有非常多高质量的内容。全球顶尖的 CP 高手基本都在上面出没。

主要的竞赛种类包括 Global Round(所有人都计分)、Regular Round(分 Div.1 和 Div.2 两组进行)、Div.2 Only、Educational Round 和 Div.3 Round 等。此外,还有一些不计分的镜像赛,以及在Gym中举办的练习赛。

近来,Codeforces 又开放了EDU板块,教学内容和配套练习的质量较高,目前内容还比较少,正在陆续添加中。

网站设在俄罗斯,如果访问缓慢,可以尝试使用国人制作的镜像 1或镜像 2。另外,在比赛期间,会临时开放比赛专用的比赛服 1、比赛服 2和比赛服 3。

AtCoder​

建立在日本的一个新兴竞赛平台。竞赛分为 Beginner、Regular、Grand 三个级别。Beginner 的前两题一般非常水,除此之外,其他题目的质量较高。

TopCoder​

老牌竞赛平台,举办经典赛事 TCO(TopCoder Open)。近年来重心转向远程工作和更宽泛的软件开发。

Google​

Google 每年举办三种类型的编程竞赛。

  • Kick Start为新手入门级,也是 Google 面试的敲门砖,每年举办八轮。
  • Code Jam是 Google 的王牌赛事,也是最重要的赛事,分为资格赛、A 轮、B 轮、C 轮和决赛。决赛每年有 25 个名额。
  • Hash Code是一项团队赛,与一般编程竞赛不同,赛题一般为没有最优答案的优化问题。分为资格赛和决赛两轮。

CodeChef​

由印度公司Directi运营的竞赛平台。特色是有 Long Challenge,一种持续十多天的马拉松赛制,其中包含几道难度极高,可能需要花费数天时间的题目。

洛谷​

国内竞赛和 OJ 平台,用户群体的平均年龄比较低。

牛客竞赛​

国内竞赛和 OJ 平台,商业性较强。本体为牛客网,主要面向求职,讨论社区比较活跃。有一些公司在其平台上进行线上笔试和面试。

Leetcode​

原本是一个求职刷题的网站,国服叫力扣。近几年来,长期举办周赛(固定在北京时间每周日的上午十点半开始),最近又增加了双周赛(每两周一次,北京时间周六的晚上十点半开始)。

赛题质量波动较大,总体难度低于其他平台。比较适合新手。

BinarySearch​

一个新的刷题网站,现在也在每周举办周赛。上面题目的总体难度要比 Leetcode 略高一些。

注意

该网站已经关闭。

网站平台(OJ 类)​

Sphere Online Judge​

UVa Online Judge​

老牌 OJ,不过评测系统不是十分友好。知名的CP Book里基本都是用 UVa 题目作为例题和练习题。

Kattis​

DMOJ​

POJ​

国内最老牌的 OJ 之一,由北京大学主办。目前界面和系统已经比较陈旧。

HDOJ​

国内老牌 OJ,由杭州电子科技大学主办。过去办比赛较多,现在主要负责举办每年的百度之星。

UOJ​

国内 OJ 平台,代码开源,被广泛传播用于搭建私有 OJ。

LibreOJ​

国内 OJ 平台。由Menci和张晴川创办。

Comet OJ​

国内 OJ 平台。

Vijos​

国内 OJ 平台。

AcWing​

国内 OJ 平台。由闫学灿创办。

HackerRank​

更偏向于求职,不限于 CP,也包括很多软件开发相关的内容。有一些公司会在这一平台组织线上笔试。

实用工具​

cf-tool​

一款用于 Codeforces 比赛和练习的命令行工具。

CP Editor​

一款基于 Qt 的 IDE,集成了多项 CP 相关的功能(测试用例抓取,快速测试,快速提交等)。

cf-predictor​

根据实时排名预测 Codeforces Rating 变化。

编译运行相关​

建议参考 OJ 平台的编译命令,比如Codeforces的(Windows 环境)。

C++打开栈空间​

  • Windows 环境,编译时加入-Wl,--stack=268435456选项(设置系统栈空间为 256 MB)。
  • Linux/Mac 环境,编译时加入-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000选项(设置系统栈空间为 256 MB)。
    • Linux 环境也可以在当前终端环境中执行ulimit -s unlimited,之后在本终端中运行的程序不受栈空间限制(该命令对 Mac 无效)
    • Mac 环境建议使用homebrew方式安装的g++(注意其调用方式为g++-v,v代表版本号),不要使用 Mac 自带的g++命令。

Java 设置堆栈大小​

编译时加入-Xss256M选项可以将堆栈大小设置为 256 MB。

Python 设置最大递归深度​

import sys

sys.setrecursionlimit(10000)

理论上来说可以设置为任意值,但实际上会受到 Python 版本和系统环境的限制,未必能达到设置值。最好的办法,还是在可以预料到递归深度太深时,放弃使用递归,或者放弃 Python。