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++-vv代表版本号),不要使用 Mac 自带的g++命令。

Java 设置堆栈大小

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

Python 设置最大递归深度

import sys

sys.setrecursionlimit(10000)

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