____________________
___________________ __________________ /___(_)_ /___(_)____________
_ ___/ __ \_ __ `__ \__ __ \ _ \ __/_ /_ __/_ /_ __ \_ __ \
/ /__ / /_/ / / / / / /_ /_/ / __/ /_ _ / / /_ _ / / /_/ / / / /
\___/ \____//_/ /_/ /_/_ .___/\___/\__/ /_/ \__/ /_/ \____//_/ /_/
/_/
个人算法竞赛(OI)代码仓库,记录信息学竞赛中遇到的题目及对应题解。
Competition/
├── LICENSE # MIT 许可证(适用于 source/ templates/ documents/)
├── LICENSE.AGPL # AGPL-3.0 许可证(适用于 website/)
├── LICENSE.md # 许可证详细说明
├── README.md # 本文件
├── .gitignore
├── .clang-format # C++ 代码格式化配置
│
├── source/ # 题解代码(按来源分类)
│ ├── competitions/ # 正式竞赛
│ │ ├── coci/2006/ # 克罗地亚公开信息学竞赛
│ │ ├── csp/ # 中国 CSP 认证
│ │ ├── noi/2003/ # 全国青少年信息学奥林匹克
│ │ ├── noip/ # 全国青少年信息学奥林匹克联赛
│ │ └── usaco/ # 美国计算机奥林匹克
│ ├── districts/ # 地区训练
│ │ └── cq/cqyc/ # 重庆育才中学
│ └── website/ # OJ 平台题目
│ ├── www.luogu.com.cn/ # 洛谷
│ │ └── utils/ # 洛谷辅助工具
│ │ ├── script-cat/ # 用户脚本「洛谷助手」
│ │ └── chromium-ext-auto-submit/ # 浏览器扩展「洛谷自动提交」
│ ├── ybt.ssoier.cn/ # 一本通
│ ├── oj.crequency.cn/ # 云矩创频 OJ
│ ├── cjsoj.cn/ # 常菁数 OJ
│ ├── xiaopangoj.com/ # 小胖 OJ
│ └── www.51nod.com/ # 51Nod
│
├── templates/ # 算法模板(BIT、线段树、KMP、高精度等)
│
├── documents/ # 学习文档
│ ├── oier-notices.md # OIer 考前注意事项(101+ 条)
│ ├── fragments.md # 算法片段备忘
│ └── OI.xmind # OI 知识体系思维导图
│
├── website/ # 题解网站项目(开发中)
│ └── scripts/ # 爬虫脚本
│ ├── luogu.py # 洛谷题目爬虫
│ ├── ybt.py # 一本通题目爬虫
│ └── README.md # 脚本使用说明
│
└── utils/ # 工具脚本
├── compile-all.sh # 批量编译脚本
└── run.sh # 编译运行脚本(含 --install 安装 runcpp 别名)
每道 OJ 题目由三个文件组成,存放在对应平台的目录下:
| 后缀 | 用途 | 示例 |
|---|---|---|
.cpp |
AC 题解代码 | P1001.cpp |
.exe |
编译产物(Windows) | P1001.exe |
.out |
编译产物(Linux / macOS) | P1001.out |
.problem.md |
题目描述(爬虫生成) | P1001.problem.md |
.explain.md |
题解说明(手动编写) | P1001.explain.md |
<pid>_<did>.in |
测试输入数据 | P1098_6.in |
<pid>_<did>.ans |
测试输出数据 | P1098_6.ans |
| 平台 | 目录 | 题目数 |
|---|---|---|
| 洛谷 | www.luogu.com.cn/ |
596 |
| 一本通 | ybt.ssoier.cn/ |
153 |
| 育才中学 | cq/cqyc/ |
77 |
| USACO | usaco/ |
28 |
| COCI | coci/2006/ |
7 |
| NOIP | noip/ |
24 |
| CSP | csp/ |
3 |
| 常菁数 OJ | cjsoj.cn/ |
31 |
| 云矩创频 OJ | oj.crequency.cn/ |
19 |
| 小胖 OJ | xiaopangoj.com/ |
16 |
| 51Nod OJ | www.51nod.com/ |
15 |
数据结构(线段树、树状数组、并查集)、动态规划(背包、区间、状压、数位、树形 DP)、 图论(最短路、网络流、二分图、拓扑排序)、字符串(KMP、哈希)、 数学(数论、组合、容斥、博弈)、搜索(DFS/BFS、回溯)、贪心、分治、计算几何。
# 单文件
g++ -std=c++17 -O2 source/website/www.luogu.com.cn/P1001.cpp
# 编译并运行(自动生成 .out 产物并执行)
bash utils/run.sh source/website/www.luogu.com.cn/P1001.cpp
# 安装 runcpp 别名(写入 ~/.bashrc / ~/.zshrc 等)
bash utils/run.sh --install
# 安装后可直接使用: runcpp source/website/www.luogu.com.cn/P1001.cpp
# 批量编译
bash utils/compile-all.sh # 顺序编译全部
bash utils/compile-all.sh -j4 # 4 线程并行
bash utils/compile-all.sh --dry-run # 仅列出文件洛谷助手 是一个运行在 ScriptCat 上的用户脚本,用于增强洛谷题目列表页的交互体验。
功能: 在洛谷题目列表页(/problem/list)页面右下角添加悬浮按钮,点击后弹出面板展示:
- 已通过 题目编号列表 + 一键复制
- 未通过 题目编号列表 + 一键复制
- 未做 题目编号列表 + 一键复制
使用方式:
- 安装用户脚本管理器(ScriptCat 或 Tampermonkey)
- 访问 Greasy Fork 页面 安装脚本
- 打开任意洛谷题目列表页,即可看到右下角的悬浮按钮
开发:
cd source/website/www.luogu.com.cn/utils/script-cat
npm install
npm run dev # 开发模式(热更新)
npm run build # 构建产物至 dist/洛谷自动提交 是一个 Chrome MV3 扩展项目,通过终端 → 本地服务 → 浏览器三组件协作,实现代码批量在线评测的自动化。
架构:
CLI (终端) --HTTP--> Daemon (后台服务) --WebSocket--> Extension (浏览器)
| 组件 | 位置 | 端口 | 职责 |
|---|---|---|---|
luogu-cli |
终端 | — | 扫描代码文件、提交任务、展示结果 |
luogu-daemon |
后台守护进程 | HTTP :9527, WS :9528 | 任务队列调度、SQLite 持久化、桥接扩展 |
| Extension | Chrome 浏览器 | — | 页面自动化(填代码、点提交)、结果采集 |
使用实例:
# 启动后台服务
cd source/website/www.luogu.com.cn/utils/chromium-ext-auto-submit
pnpm --filter @luogu-auto/daemon dev
# 安装 CLI 别名(一次性)
./utils/luogu.sh --install
# or execute: eval "alias luogu='/home/dynesshely/projects/dynesshely/Competition/utils/luogu.sh'"
# 单题提交
luogu submit source/website/www.luogu.com.cn/P/1000-1049/P1000.cpp
# 批量提交(含 Markdown 结果汇总)
luogu batch source/website/www.luogu.com.cn/ --export markdown
# 批量提交指定范围
luogu batch source/website/www.luogu.com.cn/P/1400-1499/ --include 'P14(0[2-9]|1[0-9])'开发:
cd source/website/www.luogu.com.cn/utils/chromium-ext-auto-submit
pnpm install
pnpm build # 构建全部 4 个包source/、templates/、documents/:MIT — 自由使用、修改、分发,需保留版权声明website/、utils/:AGPL-3.0 — 允许使用和修改,但衍生作品及网络服务必须开源.problem.md题目描述:版权归各 OJ 平台及原题作者所有
详细的适用范围与例外说明请参阅 LICENSE.md。