首页 > 其他分享 >自创CodeForcesHelperv1.0,解决CF太卡和跳题问题,代码持续更新!

自创CodeForcesHelperv1.0,解决CF太卡和跳题问题,代码持续更新!

时间:2024-08-16 22:27:24浏览次数:16  
标签:跳题 swal CF CodeForcesHelperv1.0 value contestId problemId ID

文章目录


前言

对于 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! 按钮,会弹出一个提示,你可以确认或取消,

请添加图片描述

点确认后会以打开新标签页的方式跳转到对应题目的页面,并弹出成功提示:

请添加图片描述

点取消的话,会弹出失败提示:

请添加图片描述

挺好的吧!


总结

这只是我写的一个小工具,目前功能简易。

有时间的话,我会持续更新它的,欢迎大家私信评论提出建议!

如果觉得有趣,可以给这篇文章点一下赞,谢谢!

标签:跳题,swal,CF,CodeForcesHelperv1.0,value,contestId,problemId,ID
From: https://blog.csdn.net/cookiebread/article/details/141270001

相关文章

  • 「杂题乱刷2」CF1183E & CF1183H
    vp到的。题目链接CF1183ESubsequences(eazyversion)CF1183HSubsequences(hardversion)解题思路考虑动态规划。设\(dp_{i,j}\)表示考虑到字符串前\(i\)个字符中选取的字符长度为\(j\)的不同的子序列数量。于是我们就有以下转移:\(dp_{i,j}=dp_{i-1,j}+dp_{......
  • CF1503E 2-Coloring
    CF1503E2-Coloring题目大意略过。做法解析不会组合,使用了DP,但其实本质相同。我们假设所有的格子都是蓝色的,然后考虑将一些格子换成黄色的。我们考虑从每一行的两头开始将格子换成黄色,只要不把整一行都换成黄色的我们就可以保证每一行恰好有一段蓝色的格子。为了保证每一......
  • D44 2-SAT+前缀优化+二分 CF587D Duff in Mafia
    视频链接: CF587DDuffinMafia-洛谷|计算机科学教育新生态(luogu.com.cn)#include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=500005;inthead[N],idx,ne[N*6],to[N*6];voidadd(intx,......
  • CF1988D The Omnipotent Monster Killer
    luogu中文题面:https://www.luogu.com.cn/problem/CF1988D树形dp。我们只关心子树的根节点v什么时候被删去。dp[u][i]+=min(dp[v][1...i-1,i+1...T]).T是log(n)的。因为\(T\leqMex(u)\),而考虑要多少节点使\(Mex(u)=T\),有\(f_T=1+f_1+...f_{T-1}\)得\(T=log_2n\)不......
  • CF 1913
    A先把第一个加到\(a\)中,然后扫到第一个不为\(0\)的开始给\(b\)。正确性显然。codeB可以交换,也就是可以任意重排。那么记录一下\(0,1\)的个数,从第一位开始模拟,知道\(0\)或\(1\)不够即可。codeC从低位往高位一位位做,假设当前做到第\(i\)位,有\(c\)个\(2^......
  • 【题解】CF - 823C : Coin Troubles
    原题传送门题目大意有\(N\)种硬币,两种硬币的面值可能相同。给定\(q\)个限制,第\(i\)个限制由\(b_i\)和\(c_i\)组成,表示第\(b_i\)种硬币的数量严格大于第\(c_i\)种硬币的数量,且每个\(b_i\)与\(c_i\)都是唯一的。问在满足所有限制的情况下,有多少种可能的方案,能组......
  • CF1530D Secret Santa 题解
    ProblemSolution每个人初始不会给自己送礼物。如果每人要送礼的人都不一样,答案即为\(n\)。如果有两个或以上的人要送给同一个人礼物,假设有\(x\)个人要给同一个人送礼物,那么必有\(x-1\)个人要更改送礼的人,并将礼物送个\(x-1\)个没有礼物收的人。然而这样送礼物可能会导......
  • 【题解】CF - 859C : Pie Rules
    原题传送门题目大意:给定一个长为\(N(1\leqN\leq50)\)的序列,Bob和Alice轮流从序列的最前端进行以下操作之一:取出序列最前端的数,并将其加到自己的分数中;取出序列最前端的数,将其加到对方的分数中,则下一轮可继续操作。两人轮流操作直到序列被取完,分数多的一方获胜。若......
  • CF1383E Strange Operation
    小清新Counting题,想到转化成序列计数后就不难了考虑将一个0/1串等价转化为一个刻画相邻两个\(1\)之间有几个\(0\)的序列比如样例中的\(00101100011100\)就可以转化为\(\{2,1,0,3,0,0,2\}\)这个序列,显然转化后的序列和原来的0/1串等价考虑此时一次操作相当于将序......
  • CF1528C Trees of Tranquillity
    小清新找性质题,想到关键就很简单考虑在第一棵树上枚举一条从\(1\)到某个点的链,显然这些点之间满足第一个限制,现在只要在这些点中选出尽可能多的点满足第二个限制即可在第二棵树上两个点没有祖先关系,等价于它们对应的DFS序区间相离而两个点的DFS序区间显然要么相离要么包......