前言
对于 OIers 来说,Codeforces 是一个很好的外国 OJ。
洛谷上确实收录了大部分 CF 的题,
但是最近由于 Codeforces 的 cloudflare 加强了,
所以洛谷的爬虫已经无法正确爬取提交记录的数据了,详见link。
我们只能在洛谷修好爬虫前,放弃在洛谷上评测,转而到 Codeforces 上直接评测。
我的个人体验是:
- 网络:有时候 CF 的官方网站会比较卡(也许是访问量大吧)
- 题库:CF 的题库是不能按题目名字搜题的,所以我是现在洛谷上搜好,知道某道题在CF上的编号后,再去 CF 上看,结果在 CF 上想按照题号看题的话,必须手动该网址,对于我这种懒人,我感到需要优化一下。
一、方法
我自己编写了一个 html,可以用 Google Chrome 等浏览器打开,支持了输入题号跳题的功能,而且在官方网站卡的时候,可以切换成镜像(我用的是mirror.codeforces.com,它比较稳定)。
二、源代码
我放出源代码来,想研究的可以看看里面的注释:
<!DOCTYPE html>
<html>
<head>
<title>CodeForces Helper</title>
<meta charset = "UTF-8">
<!-- 导入sweetalert -->
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
</head>
<body>
<h1>CodeForces Helper</h1>
<p>This is a helper for CodeForces.</p>
<!-- 表单的位置 -->
<form action = "">
<!-- 输入题号 -->
<input type = "text" id = "contestId" placeholder = "Contest ID">
<input type = "text" id = "problemId" placeholder = "Problem ID"><br>
<!-- 是否使用镜像的两个选项 -->
<input type = "radio" name = "mirrorFlag" value = "false">Use Official<br>
<input type = "radio" name = "mirrorFlag" value = "true">Use Mirror<br>
</form>
<!-- 跳转按钮 -->
<button onclick = "Jump()">Jump To The Problem!</button>
<script>
// 跳转函数
function Jump()
{
// 获取输入的题号
var contestId = document.getElementById("contestId").value;
var problemId = document.getElementById("problemId").value;
// 判断题号是否为空,防止误触跳题的按钮
if(contestId == "")
{
swal("Contest ID should not be blank!","Please input a valid Contest ID.","error");
return;
}
if(problemId == "")
{
swal("Problem ID should not be blank!","Please input a valid Problem ID.","error");
return;
}
// 获取镜像选项
var mirrorFlag = document.getElementsByName("mirrorFlag");
if(mirrorFlag[0].checked) // 官方
{
swal({
title: "You are going to be redirected to the OFFICIAL link of CF" + contestId + problemId,
text: "Click 'OK' to be redirected to the OFFICIAL link.",
type: "info",
buttons: true
}) // 弹出提示框
.then((value) => {
if(value) // 点击确认按钮时
{
window.open("https://codeforces.com/problemset/problem/" + contestId + "/" + problemId);
swal("Yeah!", "We succeeded!", "success");
}
else // 点击取消按钮时
swal("Oops!", "You canceled!", "error");
});
}
else // 镜像
{
swal({
title: "You are going to be redirected to the MIRROR link of CF" + contestId + problemId,
text: "Click 'OK' to be redirected to the MIRROR link.",
type: "info",
buttons: true
}) // 弹出提示框
.then((value) => {
if(value) // 点击确认按钮时
{
window.open("https://mirror.codeforces.com/problemset/problem/" + contestId + "/" + problemId);
swal("Yeah!", "We succeeded!", "success");
}
else // 点击取消按钮时
swal("Oops!", "You canceled!", "error");
});
}
}
</script>
</body>
</html>
三、使用方法
将以上代码粘贴到一个 html 文件中,然后用浏览器打开,就可以看到一个表单,输入题号,选择镜像或官方,点击跳转按钮,就会自动跳转到对应题目的页面。
四、效果展示
打开长这样:
然后输入比赛编号和题目编号,例如题目为1204C时,在 Contest ID
中输入 1204,在 Problem ID
中输入 C,就像这样:
然后选择用官方网址还是镜像网址,就像这样:
或这样:
最后,点击 Jump To The Problem!
按钮,会弹出一个提示,你可以确认或取消,
点确认后会以打开新标签页的方式跳转到对应题目的页面,并弹出成功提示:
点取消的话,会弹出失败提示:
挺好的吧!
总结
这只是我写的一个小工具,目前功能简易。
有时间的话,我会持续更新它的,欢迎大家私信或评论提出建议!
如果觉得有趣,可以给这篇文章点一下赞,谢谢!