# 小贴士
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++-v
,v
代表版本号),不要使用Mac自带的g++
命令。
- Linux环境也可以在当前终端环境中执行
# Java设置堆栈大小
编译时加入-Xss256M
选项可以将堆栈大小设置为256 MB。
# Python设置最大递归深度
import sys
sys.setrecursionlimit(10000)
2
3
理论上来说可以设置为任意值,但实际上会受到Python版本和系统环境的限制,未必能达到设置值。最好的办法,还是在可以预料到递归深度太深时,放弃使用递归,或者放弃Python。