前几天不知道主板抽什么风,BIOS又炸了。
博主现在用着的是一块某G姓品牌的GA-Z77P-D3(如下图,图源网络)
这块主板搭载了双BIOS(位于主板右下角SATA接口上),在主BIOS故障时,可以通过Backup BIOS进行恢复。但博主之前不知道,第一次卡BIOS时,还拿出去给奸商大砍30大洋,血一样的教训……
现在第二次卡BIOS,终于知道了有双BIOS,这次就直接恢复试试。
博主没有别人短接BIOS针脚的实力,也没有断电几分钟自动恢复的运气,只能踏踏实实的恢复BIOS。
将计算机关机
长按开机键,开机后不要断开
等待约10秒后计算机自动断电重启
进入BIOS恢复页面等待
Tip:有时候长按开机键后,CPU风扇刚刚起转就断电了,这种情况可能需要多试几次。
等待进度条跑完,重启,电脑成功启动进入系统。
在逛别人的博客的时候,发现了有一种叫go.php
的东西,可以经过自己站点的网页再跳转出去,方便SEO优化。但是像Hexo这类静态博客,想要从源HTML修改链接难度有点大,这里我们采用JavaScript动态修改。
博主根据这个大佬的博客里的二次跳转,魔改了一个静态版:Go Jumper
所以,现在登陆你的Github账号,Fork这个仓库,选择你的个人账户。
Fork完毕后,点击Settings->Pages,将原分支从none
修改为master
,目录保持为/(root)
,然后Save。
这样,你自己的Go Jumper就成功部署在https://[你的Github用户名].github.io/go-jumper/
了。
当然,你也可以绑定自己的域名,或者部署到其他的平台,这里不展开赘述。
index.js
为了方便,我们这边直接在线修改:打开https://github.com/[你的Github用户名]/go-jumper/edit/master/js/index.js
,修改以下内容:
1 | document.getElementsByClassName("loading-text")[0].innerHTML = "参数错误,将跳转至pai233の小窝<dot>...</dot>"//修改为你自己的提示 |
然后直接commit,现在,你可以通过https://[你的Go Jumper部署地址]#[跳转网页的base64编码]
来测试一下。
这里以博主使用的Hexo+NexT主题为例,新建[主题根目录]/source/js/link-checker.js
,内容如下:
1 | $(document).ready(function(){ |
最后到[主题根目录]/layout/_layout.swig
中,在</head>
标签前加入以下内容:
1 | <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> |
这样,当博客加载完毕的时候,博客的全部外链就会被加上二级跳转,但是源HTML里的外链不变。
在index.html
中,博主插入了广告代码,有需要的可自行删除:
1 | <div id="google-ads"> |
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:点击这里
]]>一道挺水的DFS。
小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了,于是他们向 博士请教, 博士拿出了他最近发明的“靶形数独”,作为这两个孩子比试的题目。
靶形数独的方格同普通数独一样,在 格高的大九宫格中有 个 格高的小九宫格(用粗黑色线隔开的)。在这个大九宫格中,有一些数字是已知的,根据这些数字,利用逻辑推理,在其他的空格上填入 到 的数字。每个数字在每个小九宫格内不能重复出现,每个数字在每行、每列也不能重复出现。但靶形数独有一点和普通数独不同,即每一个方格都有一个分值,而且如同一个靶子一样,离中心越近则分值越高。(如图)
上图具体的分值分布是:最里面一格(黄色区域)为 分,黄色区域外面的一圈(红色区域)每个格子为 分,再外面一圈(蓝色区域)每个格子为 分,蓝色区域外面一圈(棕色区域)每个格子为 分,最外面一圈(白色区域)每个格子为 分,如上图所示。比赛的要求是:每个人必须完成一个给定的数独(每个给定数独可能有不同的填法),而且要争取更高的总分数。而这个总分数即每个方格上的分值和完成这个数独时填在相应格上的数字的乘积的总和。如图,在以下的这个已经填完数字的靶形数独游戏中,总分数为 。游戏规定,将以总分数的高低决出胜负。
由于求胜心切,小城找到了善于编程的你,让你帮他求出,对于给定的靶形数独,能够得到的最高分数。
这道题爆搜肯定不行,所以要像平时做数独时一样,从 少的地方开始搜索。
1 |
|
这道题没认真想,一开始还爆了空间。
西西需要把输入的电压 伏通过一系列电压放大器放大成原来的 倍,然后输出。
西西现在手上有两种放大器:
第一种能够把X伏的电压放大成 伏
第二种能够把X伏的电压放大成 伏
放大器是串联(即按顺序放在一条线路上)的。
现在西西手上有用不完的放大器,他希望能组出一个电路,使用数量最少的放大器,使得电压被放大了刚好 倍。
将两种操作分别添加进队列,找到合适答案后跳出。
1 |
|
由于能够出现答案的 都是奇数,所以提前特判,然后倒推。
1 |
|
这道题明显一开始想复杂了,没有细推数据,下次还是要注意。
]]>这道题的核心是曼哈顿距离。
鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!”。 鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图)。
有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”
我们假定多多在每个单位时间内,可以做下列四件事情中的一件:
1.从路边跳到最靠近路边(即第一行)的某棵花生植株;
2.从一棵植株跳到前后左右与之相邻的另一棵植株;
3.采摘一棵植株下的花生;
4.从最靠近路边(即第一行)的某棵花生植株跳回路边。
现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。 例如在图2所示的花生田里,只有位于的植株下长有花生,个数分别为。沿着图示的路线,多多在个单位时间内,最多可以采到个花生。
曼哈顿距离跳到下一植株,同时要注意第步时可以直接跳过去。
1 |
|
一道水模拟,可以直接算。但菜鸡不会……
原题导航:https://www.luogu.com.cn/problem/P1014
一个表格:
, , , , …
, , , …
, , …
, …
…
按照Z字型排列,即:
问第项是什么。
这样的表格比较难看,我们先把它转换一下:
这样将每一行都分离了出来,可以发现,每行的数的数量形成了等差数列。第一行有个数,第二行有个数……
那么,我们就要将第项所在行找出来:
1 | int add=1; |
当然,这个可以直接算出来,没有必要暴力枚举,但数据太水了,依旧可以过。
知道它是第几行的,我们就要看他是什么了。不难发现,当add
是奇数的时候,add
行分母依次为从递增到add
的数列,分子为从add
递减至的数列;而当add
是偶数的时候,add
行分子依次为从递增到add
的数列,分母为从add
递减至的数列。
可以得到以下的代码:
1 | //add为当前行数的数量,n是倒数第几个,最后别忘了+1 |
完整AC代码:
1 |
|
这道题可以用DFS,也可以用BFS,这里我采用了DFS(因为懒)。
给定一个只含和、的迷宫:
1 | n=4 |
从每一个为的位置,可以走到相邻的处;从每一个为的位置,可以走到相邻的处。即上一个走过来的格子不能与现在的格子相同。
接下来有次查询,每次查询给定一个,表示迷宫里第行第列的格子,询问从这里开始最多能走到几个格子(包括自身)。
根据题意,很容易得到第一版的DFS代码:
1 |
|
但这样的代码只拿了70分,剩下的三个点全部超时。
我们可以发现,在同一个块里的点都能相互联通,所以,只要这一个块里的其中一个点被搜过了,其它的点其实已经得出来了:
在上图,红框框起来的点都可以互相到达,所以他们最多能走到的格子都一样,即这个联通块内的坐标个数——个。
这样,可以得出第二版代码:
1 |
|
由于联通块的特性,我们不需要每次都清空mapBooker
数组,因为只要搜过的地方就没必要再搜了。
再次提交,成功AC。
今日,CCF报名官网出现严重Bug,多地的OIer可在报名官网的新闻栏目随意发布新闻(博主身处GD,目前只剩这条了):
Tips:随意发布公告可能会被禁赛
一条不知道是否官方的“新闻”指路:http://cspsj.noi.cn/page/index/noiNews.php?id=103
由于此博文导致的无法删除新闻、各类作死博主不承担任何责任,请各位姥爷自行衡量事情风险!
目前,所有登录后的用户均可以在此处随意编辑公告;公告保存后,登录账户所在省的全部用户(暂定)均可查看,但可以通过枚举http://cspsj.noi.cn/page/index/noiNews.php?id=
后面的id
进行查看(Example:http://cspsj.noi.cn/page/index/noiNews.php?id=139
、http://cspsj.noi.cn/page/index/noiNews.php?id=103
)。
此Bug发现后,一时间,各省的新闻栏如同垃圾场,涌现了一堆无意义新闻(下列图片来源于网络):
这里博主再次提示,请勿以身试法,防止禁三。
目前此Bug已被紧急修复。
Updated at 2021/10/13 09:20:
Updated at 2021/10/13 21:13:
今天重装了VS Code(别问我为啥),但速度……呵呵……
首先,像平常一样,点击下载VS Code。
开始下载以后,你的浏览器会自动创建一个下载任务,但速度可与X度网盘比拟:
这时,右键下载任务(此处使用Microsoft Edge),复制下载链接:
此时,你的剪贴板里就会有一串这样的网址:
1 | https://az764295.vo.msecnd.net/stable/ee8c7def80afc00dd6e593ef12f37756d8f504ea/VSCodeUserSetup-x64-1.61.0.exe |
现在,将网址里的az764295.vo.msecnd.net
替换为vscode.cdn.azure.cn
,变成这样:
1 | https://vscode.cdn.azure.cn/stable/ee8c7def80afc00dd6e593ef12f37756d8f504ea/VSCodeUserSetup-x64-1.61.0.exe |
然后就可以直接下载了,速度++!
USACOの模拟小题。
原题链接(英文题面):http://www.usaco.org/index.php?page=viewproblem2&cpid=917
中文翻译:
Farmer John的农场边上的高速公路最近出现了引人注目的流量上升,或者至少Farmer John看起来是这样的。为了证实这件事,他打算用一组传感器测量公路上的车流量,每个传感器被用来测量一小段路面上的车流量的数值。
不幸的是,某一天经过牛棚的时候,Farmer John被绊倒了,装有传感器的盒子掉进了一个巨大的奶缸,之后它们就不能正常工作了。比起之前可以产生一个精确的车流量读数,现在每个传感器只能输出一个可能结果的范围。例如,一个传感器可能会给出范围 ,表示在这段路面上的车流量不小于 ,并且不大于 。
高速公路经过农场的这一段长 英里,车辆仅从一个方向通过公路,从第1英里驶向第 英里。Farmer John想要安装N个传感器——每一个监测高速公路上1英里长的路段。在其中某些路段上,有能够使得车辆进入高速公路的上匝道;在所有这样的路段上,Farmer John会将传感器装在上匝道上,测量流入的(近似)车流量。在某些路段上有能够使得车辆离开高速公路的下匝道;在所有这样的路段上,Farmer John会将传感器装在下匝道上。每一个路段包含至多一个匝道。如果在公路的一个路段上没有上匝道或下匝道,Farmer John就将传感器装在高速公路的主路上。
给定Farmer John的 个传感器的读数,请求出在高速公路第1英里之前和第 英里之后车流量的最为准确的可能范围。这些范围应当与所有 个传感器的读数相一致。
处理两次,第一次从后往前确定一个范围(即1公里时的车流量),而第二次反过来,从前往后确定范围(得出 公里时的车流量)即可。
1 |
|
一道简单数据结构题。
模拟队列和栈,其中队列是FIFO
,栈是FILO
。
输入时有多个测试用例。
显而易见,当需要模拟栈的时候就用STL的stack
处理,模拟队列的时候使用queue
。
但要注意的是测试用例可能会出现队列或栈已经空了,但仍要求出队/栈的情况,所以出队/栈时要先判空。
1 |
|
自从打开了Pjax后,我的博客的LaTeX加载就非常闹心……
我的博客一开始使用的是MathJax,一开始还行,后来为了搞音乐播放器,开启了Pjax,噩梦的开始……
Pjax动态加载会导致部分JavaScript文件无法自动运行,这很常见……像MathJax这类的需要在页面打开后再渲染的,自然属于这一类。
打开主题的配置文件,找到有关于数学公式的配置(这里使用的是NexT主题):
将其修改,关闭所有选项:
1 | math: |
随后打开\themes\next\layout\_layout.swig
,在<head>
处添加以下两行:
1 | <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.css" integrity="sha384-bsHo4/LA+lkZv61JspMDQB9QP1TtO4IgOf2yYS+J6VdAYLVyx1c3XKcsHh0Vy8Ws" crossorigin="anonymous"> |
这样可以将我们的博客的数学公式渲染切换到KaTeX,至于为什么不使用自带的KaTeX……在博主这里渲染一直有问题qaq
切换完后,就来看看效果……
众所周知,、,因此,我们可以得到。
勾股定理的公式是。
在C++中,定义一个数组a[n]
(假设已知),那么这个数组下标实际为
勾股定理的公式是:
根据勾股定理的公式,我们可以得到以下的伪代码,通过和,计算出:
1 | int _ = 3,$$ = 4;//a,b |
可见效果还不戳qaq
]]>又到了一年一度的CSP……
早上在学校颓whk,像我们学校怎么可能会搞集训呢……/kk
回家看了会算法书,然后去验核酸,准备考试…… (口区)
早上继续颓whk……感谢各位老师送的作业(
今天晚上开始放中秋假,在洛谷有题上康题目……发现自己还是不太熟悉那些阅读程序题和填代码题,瞬间慌了……
上一年报了rm只拿了个复赛2=,还是不敢上tg……早上收拾下东西,最后再看一下往年题,搜一下易考的知识点,蹲tg的大佬透露今早题目,据说手算base64?
下午正式开考,今年的题目除了手算base64真不会外,多数都眼瞎了……
这一题没考虑好,忘记满二叉树也是完全二叉树的一种……
这一题也脑残了,忘记看是最少的比较次数,从第二个开始遍历,那么最多只要比较 次就够了,代码如下:
1 |
|
这一次初赛,发现自己还是有很多不足……可能没得去复赛了/kk
CSP-S:
CSP-J(仅扫描件):J组63分,压着GD的线过了,好险……
给€€£支付了260CNY……
验核酸,正常whk…
晚上准备一下CSP…
好怕自己考场上一下子想不出怎么做……
蒟蒻只报了J组……
又一次来到了JZ。。。约了一个华附的大佬面基,结果没面到,在这里跟那位大佬说对不起QAQ
考场在旧科学馆503,同一个考场的有好几个之前一起集训的。
八点半正式开考。T1分糖果暴力求,如果在里有的倍数,就得的倍数,否则拿走个。
T2在每次修改后排序,如果没有修改就不排,但不知道为什么第二个样例过不去……
T3判断是否合法后用map
存储,但在你谷上测只有pts,预计是判断合法的问题。
T4只会暴力,但是暴力的时候倒数第二行总是多输出一个,用if
过掉后会死循环(fxxk!)
CSP2021 S2:
CSP2021 J2:
成绩出了,,比上一年多了分,还是做题的时候沉不下心来,不能够专注地去打完代码……今年,又结束了……
初二了,打了年的OI,却总是与目标擦肩而过……可能就要AFO了吧……
初三见。
]]>写这篇博客的缘故是因为看到cnblogs上的live2d
模型可以自动欢迎,但是自己又不会魔改Hexo
的live2d
,就想到了以弹窗的方式来欢迎。
Tips:本文基于Hexo+NexT主题,且开启Pjax局部刷新技术,其他主题的修改可能会有所不同,请自行了解文件对应位置
最终的实现效果如下:
首先,你既然要弹窗,就要好看,而不是JavaScript
里的alert()
函数,在洛谷上做题的时候,看到“提交成功”的弹窗还比较好看,就查找了一下来源(详情),然后选定了这个,感觉还不错。
我们需要将sweetalert.js
和sweetalert.css
放到自己博客下,防止CDN炸裂导致的错误:
在博客根目录往下找到\themes\next\source\js
文件夹,新建sweetalert.js
,文件内容请看这里,觉得复制麻烦的可以直接按Crtl+S
进行保存。
在博客根目录往下找到\themes\next\source\css
文件夹,新建sweetalert.css
,文件内容请看这里。
保存完后的结构如下:
打开\themes\next\layout\_layout.swig
,在<head>
标签内插入以下语句:
1 | <script src="/js/sweetalert.js"></script> |
这样就完成了引入。
在博客根目录往下找到\themes\next\source\js
文件夹,新建welcome.js
:
1 | function welcome(){ |
这样,就大功告成了。
最近有一个检测网站是否被墙的需求,找了几个网站,发现IT狗的API比较方便。
我们先看看IT狗的API的调用方式:
1 | URL:https://www.itdog.cn/firewall/[domain] |
此处的[domain]
即要检测的域名(一级域名),POST请求的主体无需变动。
这个API会返回一段HTML,即在浏览器打开时的页面。
1 | URL:https://www.itdog.cn/public/ajax.aspx?type=firewall |
此处的[domain]
即要检测的域名(一级域名),[token]
的获取稍后会提到。
若请求成功,其返回内容如下:
1 | { |
请求失败/请求过快则返回空。
1 | URL:https://www.itdog.cn/public/ajax.aspx?type=dns_error |
此处的请求主体与防火墙检测的一样,但返回内容稍微有点不同。
若请求成功,其返回内容如下:
1 | { |
同样的,请求失败/请求过快返回空。
要调用IT狗的API,首先要获取到请求Token。那这个Token去哪里找呢?在网页端测试的页面中(即第一个获取页面API),我们可以发现到这一段:
这个就是我们需要的Token了。所以我们可以写出以下代码:
1 | let _ = require("axios").default |
此时的token
变量里,已经成功存储了我们需要的Token。
既然已经获取到了Token,那么请求就简单了:
1 | let _ = require("axios").default |
这样就实现了检测域名是否被墙的需求。
]]>UPD:部署已切换完毕,网站已恢复正常。
由于Github Pages的不稳定,博客部署将会切换至Cloudflare Pages。
在切换部署中途可能会出现网络波动的问题,不便之处,敬请原谅!
]]>在向洛谷的API发起POST
请求的时候,需要在请求头中携带一个X-CSRF-Token
请求头。
我们打开洛谷,按F12
,在元素项可以找到这个:
这个就是我们所需要的CSRF Token。
通过正则表达式,我们很轻松就能写出代码:
1 | const axios = require("axios").default |
getToken()
函数会获取https://www.luogu.com.cm/
的网页(返回HTML
),随后通过正则表达式提取出CSRF Token。
我们模拟一个登陆的流程,假定showCaptcha()
作用为显示验证码,并反馈用户输入的验证码。
1 | let username = "pai233" |
这时会发现API返回了400 Bad Request
。原因是我们的CSRF Token不是从请求头中的Referer
中获取的。
Tips:部分时间测试时发现会直接返回200 OK
并登陆成功,但为防止洛谷再次修改API,建议阅读下面流程!
Referer
因为我们需要从Referer中获取CSRF Token,所以我们可以直接修改Referer
请求头:
1 | let loginStatus=await _.post('/api/auth/userPassLogin',{ |
但这样会很奇怪,我明明是要登陆的,但在首页怎么能登陆呢?都没有入口…… (账号:危)
getToken()
的请求位置我们可以通过传参的方式,让getToken()
返回Referer
中的CSRF Token。
1 | async function getToken(referer) { |
这样,我们就可以成功实现登录的逻辑了。
]]>今天给博客搞SEO的时候,将多数的链接全部改成小写的了,然后就炸了……
这个问题发生是因为Windows系统对大小写不敏感,所以Git也默认大小写不敏感。但像Github这类代码托管平台用的是Linux,Linux对大小写敏感。
首先,在Git本地仓库下执行:
1 | git config core.ignorecase false |
这行命令表示关闭忽略大小写。
然后,修改我们的本地文件/文件夹名:
修改完后push到Github上,然后查看效果:
1 | git push origin main #我用的是hexo,所以跑了hexo d,普通Git仓库push就好 |
好家伙,之前大写的没被删掉,不过小写的成功被push上去了。
目前只能一个个手动删除远程的文件/文件夹,因为本地的已经是小写了……不知道有什么解决方法😅……
]]>在编写VS Code扩展的过程中,我们有时会需要获取编辑框中的文本。
在获取编辑框中文本之前,我们需要创建一个编辑框的实例:
1 | const vscode = require("vscode") |
我们可以通过以下的代码获取到编辑框中的文本:
1 | let editorText = editor.document.getText() |
getText()
函数会返回一段文本,其为编辑框中的内容。
我们可以通过以下代码获取到分行的文本:
1 | let textArray = editor._documentData._lines |
editor._documentData._lines
会返回一个字符串数组,我们可以通过textArray.length
获取到代码的行数,也可以通过连接它们达到与获取整段文本一样的效果。
在许多时候,我们希望用户点击页面时会有一定的反馈(如浮现字幕、放烟花)。这次,我们来实现一下如何使用户点击页面时,弹出24字核心价值观。
clicker.js
文件在博客根目录往下找\themes\next\source\js
文件夹,创建clicker.js
,文件内容如下:
1 | !function (e, t, a) { |
然后保存。
_layout.swig
打开\themes\next\layout
,找到_layout.swig
,在<head>
标签内插入以下代码:
1 | <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><!--需要JQuery的支持--> |
随后可通过hexo s
查看效果: