# 小贴士

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

# 网站平台(算法类)

# OI-wiki (opens new window)

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

# CP Algorithms (opens new window)

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

# VISUALGO (opens new window)

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

# 网站平台(竞赛类)

# Codeforces (opens new window)

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

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

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

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

# AtCoder (opens new window)

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

# TopCoder (opens new window)

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

# Google (opens new window)

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

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

# CodeChef (opens new window)

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

# 洛谷 (opens new window)

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

# 牛客竞赛 (opens new window)

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

# Leetcode (opens new window)

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

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

# BinarySearch (opens new window)

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

# 网站平台(OJ类)

# Sphere Online Judge (opens new window)

# UVa Online Judge (opens new window)

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

# Kattis (opens new window)

# DMOJ (opens new window)

# POJ (opens new window)

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

# HDOJ (opens new window)

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

# UOJ (opens new window)

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

# LibreOJ (opens new window)

国内OJ平台。由Menci (opens new window)和张晴川创办。

# Comet OJ (opens new window)

国内OJ平台。

# Vijos (opens new window)

国内OJ平台。

# AcWing (opens new window)

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

# HackerRank (opens new window)

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

# 实用工具

# cf-tool (opens new window)

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

# CP Editor (opens new window)

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

# cf-predictor (opens new window)

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

# 编译运行相关

建议参考OJ平台的编译命令,比如Codeforces (opens new window)的(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)
1
2
3

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