F16wer's

Back

26春训练Blur image

上学期踩线过了ACM实验室的选拔,摆了大半个寒假也该干些正事了。

近期比赛#

2026-3-21 浪潮杯校赛(已完结)

2026-4-11 蓝桥杯A组省赛(c++)

PS:原定的天梯赛因笔者选拔赛时身心不适退赛。

近期备赛安排#

现水平还是很一般啊,而且老本也丢得差不多了,也没什么好啃的了。

目前的想法是以AcWing的蓝桥杯每日训练为路线进行一个基本的突击,各个板块先达到一个基本的“省赛够用”水平。

训练日志#

2/20 —— 前缀和 & 差分
前缀和 T1 AcWing 3956. 截断数组.
前缀和 T2 AcWing 1230. K倍区间.
差分 T1 AcWing 3729. 改变数组元素.

2/24 —— 二分
T1 AcWing 1460. 我在哪?.
T2 AcWing 1221. 四平方和.

2/25 —— 二分
二分 T3 AcWing 1227. 分巧克力.

3/5 —— 双指针
T1 AcWing 3768. 字符串删减
T2 AcWing 1238. 日志统计

3/8 —— 递推
T1 AcWing 1208. 翻硬币.

3/9 —— 最短路
T1 Dijk基本模板.
T2 Dijk 的 堆优化 & 变体.(密码:ey33).
T3 SPFA求负环基本模板.
T4 Floyd求传递闭包基本模板.

3/10 —— DFS & 蓝桥杯特训
DFS T1AcWing 3502. 不同路径数.
[蓝桥杯 2022 省 A] 填空问题.
[蓝桥杯 2022 省 A] 求和.
[蓝桥杯 2022 省 A] 选数异或.

3/11 —— 背包DP
背包DP T1(完全背包)P1616 疯狂的采药.
背包DP T2(01背包)P1833 樱花.

3/21 —— 浪潮杯校赛.

3/28 & 29 —— 蓝桥杯 2025 省A c++.(能力所限,只写简单题)
P12138 [蓝桥杯 2025 省 A] 寻找质数.
P12139 [蓝桥杯 2025 省 A] 黑白棋
P12140 [蓝桥杯 2025 省 A] 抽奖
P12141 [蓝桥杯 2025 省 A] 红黑树
P12143 [蓝桥杯 2025 省 A] 好串的数目
P12144 [蓝桥杯 2025 省 A] 地雷阵


PS:思来想去,决定这里只放题号,按月另开帖子po代码,全放这还是太挤了些。

一些经验/教训/值得记录的理解/备忘#

“小细节”:


不开longlong见祖宗。——统计类问题常开longlong统计结果,可存10的18次方量级的数据。

内存爆栈问题。——数组最好放全局变量那。对于256mb来说,longlong开1.5x10的7次方以内是安全的。

对于memset“上限”,一般填0x3f,但在程序当中检测“是否有更新过”时,则不是0x3f,实际大小是0x很多个3f,有效的检测办法是>1e18.

计数时,用 a[++cnt] 而不是 cnt+=1 可以有效防止“多加一次”问题.
注意变量名字冲突问题,命名得有意义一些是一个有效的办法.
深搜时每写一个dfs() 一定要在后面记得加return 和 复位.
某值从1到n环形移动时,考虑边界的整除问题,正确的代码是a = (a + x - 1) % n + 1;

多测清空问题:


对于数组:
法1:memset(a + L, 0, (R - L + 1) * sizeof(数据类型));
法2:直接覆盖

对于vector,要用for挨个.clear().

队列/栈:while(!q.empty()) q.pop();

异或运算:


相同为0,不同为1.
归零律:a⊕a=0 (自己和自己异或,底牌全消)
恒等律:a⊕0=a (和 0 异或,保持真我)
交换律与结合律:a⊕b⊕c=a⊕c⊕b (随便打乱顺序,结果不变)
自反律:如果 a⊕b=c,那么必然有 a⊕c=b 和 b⊕c=a.

预处理:


对于一些无法避免的枚举层数较多的问题(如AcWing 1221),可以预先计算并存储。

可以考虑对 某组输入数据 依据某项值(如时间/大小)进行预处理(如排序)来简化后续处理 如sort(a,a+n).

数论:


找质数要从2开始找.

已经复习过的算法复述#

1 前缀和:通过b[i] = a[i] + a[i - 1] 实现对“前i项和”的统计,方便后续处理

2 差分:通过b[i] = a[i] - a[i - 1] 实现前缀和的逆运算。

3 二分:处理“有序数据”的查询,可用于解决“最大值最小化”/“最小值最大化”。
一个基本的实现(保证左边界合法右边界不合法)

while (l + 1 < r) {       // 如果两边界不相邻
    int mid = (l + r) / 2;  
    if (check(mid))         
      l = mid;              
    else
      r = mid;  
  }
  return l;  // 返回左边界
c

4 双指针:在统计区间信息时,一般会“对每个节点往后计算区间长度”再统计,然而我们可以通过维护两端节点的信息来避免重复计算。

5 单源最短路:通过不断的松弛操作,得到最短路.
堆优化的一个模板.

struct node{
  long long dis,u;
  bool operator>(const node& a) const{return dis > a.dis;}
};
priority_queue<node vector<node>,greater<node>>;
c

6 排序STL模板

sort(v.begin(), v.end());//vector的排序(从小到大)
sort(v.begin(), v.end(), cmp);//自定义比较函数 (也有用结构体+重载运算符的操作) 
sort(arr, arr + n);//普通数组排序 
sort(arr + 1, arr + 3);//局部排序

bool cmp(const Student& a, const Student& b) {
    if (a.score != b.score) {
        // 第一优先级:分数不同时,分数高的排前面(降序)
        return a.score > b.score; 
    } else {
        // 第二优先级:分数相同时,学号小的排前面(升序)
        return a.id < b.id; 
    }
}//以成绩排序为例的一个cmp函数模板
c

7 区间合并:遇到了如P12144 [蓝桥杯 2025 省 A] 地雷阵的题目,
存在多个区间而需要求解“覆盖了多少”的问题。
可以通过:先对所有区间按左端点顺序进行排序,如排在后面的区间的左端点出现在了目前区间的右端点的前面——把目前区间的右端点更新至后面区间的右端点,在扫描完目前区间的右端点时把该区间合并,存至另外一个数组。
简而言之:在排序完区间后维护右端点直到无重合且离开区间。

8 三角函数:c++里的函数主要以弧度形式存在

函数名数学含义参数要求返回值范围
sin(x)正弦 sin(x)\sin(x)弧度值[1,1][-1, 1]
cos(x)余弦 cos(x)\cos(x)弧度值[1,1][-1, 1]
tan(x)正切 tan(x)\tan(x)弧度值(,+)(-\infty, +\infty)
asin(x)反正弦 arcsin(x)\arcsin(x)必须在 [1,1][-1, 1] 之间[π/2,π/2][-\pi/2, \pi/2]
acos(x)反余弦 arccos(x)\arccos(x)必须在 [1,1][-1, 1] 之间[0,π][0, \pi]
atan2(y, x)全象限反正切坐标 (y,x)(y, x)(π,π](-\pi, \pi]

度数转化为角度模板

#include <cmath>

const double PI = acos(-1.0);//获取pi
double degree;
double radian = degree * (PI / 180.0); // 将 度数 转换为 弧度
c

待办#

1 同余性质等基本的数论学习(在实际比赛中往往是 部分分 到 全部分 的关键,例如AcWing 1230,不知道同余的话没办法优化到一层循环,我也是看了题解才写出来的)

2 重载运算符学习(已完成).

26春训练
https://astro-pure.js.org/blog/2026%E6%98%A5%E8%AE%AD%E7%BB%83
Author F16wer
Published at 2026年2月20日
Comment seems to stuck. Try to refresh?✨