Qcy's Blog

Qcy的个人博客

2026CSP-J-S初赛游记

2026年8月20日 ∼\sim 2026年8月30日

在学校机房集训。在一张一张的初赛模拟卷中痛苦挣扎。饿啊饿啊饿啊。

2026年8月31日

开学了。

…

2026年9月18日晚上

老师给的复习单上怎么乍一看那么多没掌握牢的?!看来得奋战一晚上了! dpdp , 排列组合 和 哈夫曼树 是我的弱项,而且一直复习但一直没弄懂。
刷题的时候还在想为什么涉及到图论的单选题一直都没有配图,题目中明明说了如右图啊!

复习提纲:

  • 计算机基础知识
  • C/C++语言基础知识及数据范围
  • 进制转换与位运算
  • 指针与内存地址
  • DFSDFS 与 BFSBFS
  • 图论
  • 动态规划 dpdp
  • 二分查找
  • 结构体
  • 链表及插入/删除
  • 递推与递归
  • STL (StandardTemplateLibrary,标准模板库)(Standard Template Library,标准模板库)

不停地刷做过的错题和J组往年的真题,刷到 21:3021:30 ,心里差不多有了底,给自己定了一个目标:

  • J组考到75分及以上;
  • S组尽力就行,最好考到60分及以上。

躺在床上睡不着,一边想该怎么做题一边押题:这次J组完善程序应该会出 dpdp 或 二分 吧?
不管了,先把觉睡好吧!

2026年9月19日

早早地起了床。
吃完早饭,坐车去考场。经过二十多分钟的车程,我总算到了考场 (无锡金桥双语实验学校初中部,瑞景道1509号) 附近。
考场附近人好多啊!!! 汽车和电动车都堵得水泄不通的。
我只能下车,自己步行到校门口。
到了校门口,在一堆人 (大概300 ∼\sim 400人) 中找到同学和教练。

和我一起考的同年级的同学:

在门口找到教练。和hzq,wzy一起进去,看了一会儿考点地图。
居然还遇见了我的小学同学?!
其他人全部往食堂里走是怎么回事?不管了,先跟着进去吧!
原来是在食堂里等会,等到入场时间以后才能进场。
我J组的考场在2楼。我的同学居然没有一个跟我在一个考场的!


9:159:15
通过“安检”,进入了考场。

9:309:30
CSP−J1CSP-J1 考试正式开始。

11:3011:30
呼 ∼\sim 总算考完 JJ 组了!
考完的感受:

  • 选择题好水!感觉可以 AKAK 选择题
  • 阅读程序还好,都能看懂,应该不会扣超过 7.57.5 分
  • 完善程序也还行,基本看得懂, 1010 道完善程序选择题中只有两道不确定的

?! 我们的 CSP−J1CSP-J1 居然没有考 dpdp ?! 感觉 8080 分没问题。稳过。


11:45∼14:0011:45 \sim 14:00
在车上吃了午饭,又复习了一会 SS 组的内容,还去停车场旁边的湿地公园转悠了一会。
那边的景色还是挺优美的。


14:1014:10
通过“安检”,进入了考场。

14:3014:30
CSP−S1CSP-S1 考试正式开始。
我考试时想的是:选择题能拿分的就拿分,不会的就博弈。

16:3016:30
考完了 SS 组了!!!
怎么感觉这次 JJ 组这么简单, SS 组这么难呢? 还是说这是我第一次比赛,没有经验?
大概估了一下分, 60∼6560 \sim 65 分左右。
后来才得知,完善程序第二道是一道 紫题\textcolor{purple}{紫题} !!! ( 洛谷 题库难度 )


2026年9月20日

这天要和中秋假期调休,所以要上学。。。
大课间的时候来到了机房,打开 洛谷 置顶帖,开始估分。
先估 JJ 组的分。
怎么选择题第一题就错啊!!!!!! 好消息是:选择题就错了第一题。
气死我了!!!!!!\textcolor{red}{气死我了!!!!!!}
因为我是把答案又抄了一遍在准考证上的,所以估得很准。
预计分数:

  • CSP−J1:83CSP-J1:83 分,稳过
  • CSP−S1:61CSP-S1:61 分,稳过 (吗?)

2026年9月24日

可以查分了。 查分网站
666怎么 504504 了?!

实际分数:

  • CSP−J1:88CSP-J1:88 分,稳过
  • CSP−S1:61CSP-S1:61 分,稳过 (吗?)

还是正常发挥甚至超常发挥的,毕竟这是我第一次考嘛。


结语

祝自己和所有 CSP−J&CSP−SCSP-J \& CSP-S 的考生能在第二轮复赛中——

rp++

并取得好成绩!

如何搭建自己的博客

前言

基本条件

你需要拥有:

  • 健全的身体
  • 一台能正常使用的电脑
  • 一点点耐心

没有的请自觉离开。
如果不愿意花时间,也请离开。

准备工作

  1. 一个Github账号 官网地址,注册账户网址,如果无法访问请耐心等待,或考虑使用WattToolkit
  2. 一个Cloudflare账号(如果需要自定义域名的话) 官网地址
  3. 一个digitalplat账号(如果需要自定义域名的话) 官网地址 ,点击右上角注册,里面的信息可以随便填
  4. nodejs 官网地址 ,点击下面的“Windows 安装程序(.msi)”按钮下载
  5. git 官网地址 ,会直接开始下载,下载速度较慢,请耐心等待。

正文

安装Git&Nodejs

安装过程这里就不细讲了,如果有不会的或有问题可以去网上搜教程。
注意Git安装过程中要勾选添加到PATH选项。
安装完整后验证是否安装成功,在cmd或git bash中运行以下代码:

1
2
3
git -v
node -v
npm -v

如果成功显示版本号,没有报错的话就是安装成功了。
注:npm是nodejs的命令行工具,可用于管理安装包(安装/删除/更新)等功能

更改nodejs环境变量

注意:这一步非常重要!

  1. 打开你安装nodejs的文件夹根目录,新建"node_cache"和"node_global"文件夹
  2. 搜索“查看高级系统设置”并打开,选择"环境变量",选择用户环境变量中的PATH,检查有没有"%你安装nodejs的根目录%\node_modules"变量,如没有就添加。
  3. 在系统环境变量中添加名称为"NODE_PATH"的环境变量,值为"%你安装nodejs的根目录%\node_modules"。
  4. 将第一步新建的两个文件夹"node_cache"和"node_global"的users权限设置为"完全控制"。

用npm全局安装hexo-cli(hexo客户端)

新建一个文件夹(可以是D:\Hexo或D:\Myblog等等,最好不要带中文)
进入这个文件夹,右击显示右键菜单,点击“open git bash here”,运行以下代码:

1
npm install -g hexo-cli --save

注意:如果你的npm版本为11.15.0及以上,安装包的时候可能会出现 EALLOWREMOTE 错误,此时应该运行以下代码:

1
2
npm uninstall -g npm --save
npm install -g npm@10.8.2 --save

此处作者安装的是10.8.2稳定版。

hexo-cli安装完成后运行hexo -v查看版本号,如果正常显示说明安装成功。

在你的博客根目录(比如之前的D:\Hexo)打开git bash,运行以下代码:

1
hexo init

当看到"start blogging with Hexo!"时说明初始化成功,运行hexo s启动本地服务器。此时打开你的浏览器,输入http://localhost:4000查看你的博客!这是landscape主题,是不是有点丑

回到git bash,按下Ctrl+C停止本地服务器


部署

注意:分支一和分支二可以同时存在,就看你愿不愿意

分支一:直接使用GitHub提供的 %你的用户名%.github.io 域名

在GitHub新建一个仓库,名字为 %你的用户名%.github.io 如果之前已经创建过,可以存在其他仓库中,同样可以部署,但是要在 %你的新仓库名%->设置->pages 中设置部署源为 root 而非 none ,点击 save 保存修改。

分支二:使用DigitalPlat的免费域名并托管到Cloudflare

洛谷入门赛#51[LGR-300-Div.4]赛后总结

比赛概述+难点分析:

  1. 本场比赛共6道题,时长共2小时
  2. 比赛为IOI赛制(比赛时可以看到分数和排名)
  3. T1,T2,T3较简单,其他较难,没做出来ToT
  4. 官方公布难度(以洛谷题目难度为准)为"红橙橙橙黄绿"

题目分析

T1 千秋的西红柿里有多少果汁

原题链接

题目分析:本题考查基本数组和循环结构,没任何难度。

完整AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<bits/stdc++.h>
using namespace std;
long long n,v[100005],w[100005],sumv,sumw;
double ans;
int main(){
cin >> n;
for(int i=1;i<=n;i++){
cin >> v[i];
sumv+=v[i];
}
for(int i=1;i<=n;i++){
cin >> w[i];
sumw+=w[i];
}
ans=1.0*sumw/sumv;
cout << fixed << setprecision(6) << ans;
return 0;
}

T2 千秋的数学探究活动没有问题

原题链接

题目分析:先将所有数的和算出来,在暴力枚举,再与最大值比较,注意最大值是字符串形式!!!最后输出最大值即可。

完整AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<bits/stdc++.h>
using namespace std;
long long n,a[1000005],k,sum;
string s1,maxx;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
for(int i=1;i<=n;i++){
cin >> a[i];
sum+=a[i];
}
s1=to_string(sum);
maxx=s1;
long long len=s1.length();
if(k>len){
k=n;
}
for(int l=1;l<=k;l++){
for(int i=0;i<len-l+1;i++){
string tmp=s1;
reverse(tmp.begin()+i,tmp.begin()+i+l);
if(tmp>maxx) maxx=tmp;
}
}
cout << maxx;
return 0;
}

T3 千秋的进制转换应该比较快

原题链接

题目分析:这题考查最基础的进制转换,最基础的思路就是先将16进制字符串转成10进制整数,再转成2进制,但是注意字符串长度可能比较长,在16进制转10进制时常规方法会爆 long long ,强烈建议用bitset,能直接转为二进制,STL好用!

完整AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<bits/stdc++.h>
using namespace std;
int n;
string s,ans;
int main(){
cin >> n >> s;
for(int i=0;i<n;i++){
long long m=0;
if(s[i]>='0'&&s[i]<='9'){
m=s[i]-'0';
ans+=bitset<4>(m).to_string();
}else{
m=s[i]-'A'+10;
ans+=bitset<4>(m).to_string();
}
}
while(ans[0]=='0'&&ans.length()>1) ans.erase(0,1);
cout << ans;
return 0;
}

T4 千秋的研究并不聚焦稀疏矩阵乘法

原题链接

题目分析:无

完整AC代码

1

T5 千秋的质数定义比较不一般

原题链接

题目分析:无

完整AC代码

1

T6 千秋的键盘为什么如此奇怪

原题链接

题目分析:无

完整AC代码

1


EOF

Hexo折叠框测试

先说Cloudflare人机验证

你是否在访问某些网站或提交代码时人机验证失败,很崩溃?

没关系,我跟你一样讨厌人机验证

有时在比赛或需要时效性的事情中,这件事就变得特别棘手。有时几分钟可以做完的事情,却因为人机验证而卡了几个小时。

Cloudflare人机验证本来的目的

Cloudflare人机验证本来的目的是为了防止自动程序、机器人或爬虫入侵网站,保证网站、用户信息的安全。

这么做当然没错,做得好我还会称赞。

但是!

现在的情况好像正好相反:不停循环验证还失败,不知道有没有保证安全,反正用户体验是拉爆了。

作者亲身经历:2026-8-4晚上作者提交CodeForces的题目,在人机验证阶段卡了一个半小时。

吐槽完了,有什么解决方法吗?

有还是有的。

注:以下部分结果来源于网络,信息可能不准确,仅供参考

  • 换个网络:可以连接手机热点,或其他网络,保证网络信号好
  • 休息一下,不要太频繁地操作,这让容易让人机验证机制将你判定为人机或自动程序。
  • 检查浏览器兼容性并清除缓存或重启浏览器,浏览器运行时间过长可能产生很多缓存,影响浏览器和设备性能。
  • 清除DNS解析缓存:
    打开 Windows PowerShell ,输入以下命令并回车执行:
    1
    ipconfig /flushdns
  • 同步系统时间:
    按 Win+I 快捷键打开 Windows 设置 ,找到 时间和语言->日期和时间->其他设置->立即同步 ,点击右侧 立即同步 按钮,等待同步完成。如果同步失败,多试几次。

再说CodeForces的土豆服务器

被土豆服务器困扰也很让人崩溃

感觉服务器像土豆地雷,你只知道它会炸,但永远不知道它什么时候会炸

土豆服务器爆炸日志:

  • 2026-8-2 13:00 左右,整个网站炸掉了,主页也进不去
  • 2026-8-4 20:30 评测机爆炸了,提交上去一直是In queue,到 2026-8-5 8:30 左右才好

2026-8-2代码源C队模拟赛-3赛后总结

别问我标题为什么是C队模拟赛-3

比赛概述+难点分析:

  1. 本场比赛共4道题,时长共4小时。
  2. 比赛为OI赛制(比赛中看不到分数和排名)
  3. T1,T3较简单,

题目分析

T1 双面编号牌

原题链接
分析:
题目条件:

  1. 1<=a<=n;
  2. 1<=b<=m;
  3. a+b=k*b*gcd(a,b)

首先证明 a 一定是 b 的倍数:
证明:
因为 a+b=k*b*gcd(a,b) , a+b是b*gcd(a,b) 的倍数, a 是 b 的 (gcd(a,b)-1) 倍,又因为 a>=1,b>=1 ,所以 gcd(a,b)-1!=0 。
因为 a 是 b 的 (gcd(a,b)-1) 倍且 (gcd(a,b)-1) 为自然数,所以 a 一定是 b 的倍数。
证明完毕。
最后总结出公式: a+b=k*b2,即 (a+b)%(b*b)==0 ,这道题就迎刃而解了。
警告:循环一定要开long long!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<bits/stdc++.h>
using namespace std;
long long T,n,m,ans;
int main(){
ios::sync_with_stdio(0); //快读快写
cin.tie(0);
cin >> T;
while(T--){
ans=0;
cin >> n >> m;
for(long long i=1;i<=m;i++){ //b
for(long long j=i;j<=n;j+=i){ //a是b的倍数,j+=i
if((i+j)%(i*i)==0) ans++; //利用总结出来的公式
}
}
cout << ans << "\n"; //输出
}
return 0;
}

T2 矩阵行列交换

原题链接
分析:

1

T3 石子游戏

原题链接
分析:

1

T4 二进制砝码组合

原题链接
分析:

1


结语:这是作者换到C队的第一场模拟赛,本来可以拿100分的,因为 long long 开成了 int ,遗憾失分。也希望看到这篇文章的读者不要忘了开 long long!!!

2026-7-31代码源D队模拟赛-2赛后总结

模拟赛总算结束了,我又来写总结了。

比赛概述+难点分析:

  1. 本场比赛共6题,时长共4小时。
  2. 比赛为IOI赛制(比赛中可以看到分数和排名)。
  3. T1,T2,T3,T5较简单,T4较难 (我当时调了1个小时) ,T6难度尚可 (没做完) 。

题目分析

T1 美味的辣酱

原题链接
这题不需要动脑子,直接上代码:

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<bits/stdc++.h>
using namespace std;
int q,x;
int main(){
cin >> q;
while(q--){
cin >> x;
if(x<4){
cout << "MILD\n";
}else if(x>=4&&x<7){
cout << "MEDIUM\n";
}else{
cout << "HOT\n";
}
}
return 0;
}

T2 对决游戏

原题链接
emm…这题有点意思, 但是我当时卡了二十分钟
其实这题只需要总结几个赢的条件。注意一定要总结全!

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<bits/stdc++.h>
using namespace std;
int q,a,b,c;
int main(){
cin >> q;
while(q--){
cin >> a >> b >> c;
if(b+c<a){
cout << "YES\n";
}else if(abs(b-c)<a){
cout << "YES\n";
}else{
cout << "NO\n";
}
}
return 0;
}

T3 硬币兑换

原题链接
分析:因为1枚金币可以兑换5枚银币,5枚银币可以兑换1枚金币;所以我们可以假设金币价值为5,银币价值为1。因为兑换时总价值不变,同时丢弃一枚金币和银币总价值就会减少6,可以先判断原来的总价值 p1 和兑换后的总价值 p2 ,如果 p1-p2(易得p1>=p2)%6!=0 就直接输出"No\n"。
话不多说,直接上代码。

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll q,a,b,aa,bb;
int main(){
cin >> q;
while(q--){
cin >> a >> b >> aa >> bb;
ll p1=5*a+b,p2=5*aa+bb;
if(p1<p2){
cout << "No\n";
continue;
}
if((p1-p2)%6!=0){
cout << "No\n";
continue;
}
ll jian=(p1-p2)/6;
if(aa+jian>=0&&bb+jian>=0){
cout << "Yes\n";
}else{
cout << "No\n";
}
}
return 0;
}

T4 追逐大作战

原题链接
就是这题花了我一个小时的宝贵时间!!!不然我T6就做出来了!!!
分析:

C++

1

T5 手链修复

原题链接
分析:假设两个原来的字符串和两个反转后的字符串分别为s1,s2,r1,r2;它们一共有四种组合方式:{s1,s2},{s1,r2},{r1,s2},{r1,r2};再写一个check()函数检验这是种组合方式能否被分成两个一模一样的字符串。

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<bits/stdc++.h>
using namespace std;
int q;
string s1,s2;
bool check(string t1,string t2){
bool flag=true;
string tmp=t1+t2;
int len=tmp.length(),m=len/2;
for(int i=0;i<m;i++){
if(tmp[i]!=tmp[i+m]) flag=false;
}
return flag;
}
int main(){
cin >> q;
while(q--){
cin >> s1 >> s2;
if((s1.length()+s2.length())%2!=0){
cout << "NO\n";
continue;
}
string r1=s1,r2=s2;
reverse(r1.begin(),r1.end());
reverse(r2.begin(),r2.end());
if(check(s1,s2)||check(s1,r2)||check(r1,s2)||check(r1,r2)){
cout << "YES\n";
}else{
cout << "NO\n";
}
}
return 0;
}

T6 六进制能量果

原题链接
分析:因为输入的是一串六进制数,所以要先把它们转成十进制作乘法再转回六进制,最后统计一下就行了。

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<bits/stdc++.h>
using namespace std;
int n,x,t[200005],tt[200005];
int main(){
cin >> n >> x;
for(int i=1;i<=n;i++){
int y;
cin >> y;
int v=0,d=1;
while(y){
v+=(y%10)*d;
d*=6;
y/=10;
}
t[i]=t[i-1];
while(!(v%2)){
v/=2;
t[i]++;
}
tt[i]=tt[i-1];
while(!(v%3)){
v/=3;
tt[i]++;
}
}
int l=1;
long long ans=0;
for(int i=1;i<=n;i++){
while(l<=n&&(t[l]-t[i-1]<x||tt[l]-tt[i-1]<x)){
l++;
}
ans+=n-l+1;
}
cout << ans;
return 0;
}

Markdown学习笔记

因为Hexo要用Markdown写文章,所以就有了这篇学习笔记

标题类

格式:

"#"表示一级标题
"##"表示二级标题
"###"表示三级标题
"####"表示四级标题
"#####"表示五级标题
"######"表示六级标题

粗体、斜体、斜粗体类

格式:

两边各两个星号表示粗体:粗体
两边各一个星号表示斜体:斜体
两边各三个星号表示斜粗体:斜粗体

列表类

格式:

普通列表

无序列表:+/-/*
有序列表(数字可以不连续):1.
2.
3.
列表可以嵌套,只需要在子列表的标记符号前面添加两个或四个空格即可,保持缩进长度尽量一致。

任务列表

任务列表:- [ ]
- [x]

引用类

格式:

"> "(紧跟一个空格)表示引用
多级引用只需重复基础引用的符号即可(要加空格!)

代码类

格式:

这是一段代码

“```”(两边都要)表示一个代码块

链接类

格式:

普通链接

“[链接名称]”(链接URL “可选标题”)"

参考链接

“[参考链接]: URL “可选标题””

图片类

格式:

“![替代文字]”(URL “可选标题”)"

比如:

相对路径:“![favicon]”(./images/favicon.ico)"
绝对路径:“![screenshot]”(C:\Users\Administrator\Pictures\screenshot.jpg)"

表格类

格式:

“|表头|表头|
|----|----|
|单元格|单元格|
|单元格|单元格|”

对齐方式:

":—"表示左对齐
"—:"表示右对齐
":—:"表示居中对齐

分割线类

格式:

“***”/“—”/"___"都可以
符号中间可以有空格,也可以使用三个以上的符号

数学公式类

格式:

  1. 命令:以反斜杠 "" 开头,如 \alpha、\sum
  2. 参数:用花括号 “{}” 包围,如 \frac{a}{b}
  3. 下标:使用 “_” ,如 x_1
  4. 上标:使用 “^” ,如 x^2
  5. 分组:用花括号将多个字符组合,如 x_{i+1}

行内公式与块级公式

用单个符号 ""包裹,如函数" 包裹,如函数f(x)=x^2+2x+1$

图表类

格式:

例如:

graph TD
    A[开始] --> B{条件判断}
    B -->|Yes| C[执行操作A]
    B -->|No| D[执行操作B]
    C --> E[结束]
    D --> E

其他注意事项

  1. 换行要用尾随至少两个空格+一个换行符,或两个换行符
  2. 标记符号(如+/-/*)后面要跟一个空格
0%