自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 收藏
  • 关注

原创 Codeforces 2245 D2 / E / F 题解

若它为负,其类型 1 邻点必须是绝对值不小于它的正数,再沿这个正数的一条类型 2 边同样会要求更大的负数,均矛盾。这道博弈的关键结论是:第一步选择的路径为必胜路径,当且仅当路径的两个端点度数为奇数,所有内部点的度数为偶数。对于当前还没有处理的点,如果它只连接一种类型的边,就可以直接确定它的正负号:只剩类型 1 边就赋一个较大的正数,只剩类型 2 边就赋一个绝对值较大的负数。时,它的绝对值大于所有尚未处理的相邻点,因此它可以主导两数之和的符号:正数一定满足剩余的类型 1 边,负数一定满足剩余的类型 2 边。

2026-07-18 23:45:34 239

原创 【AI 使用案例】如何使用 AI 进行代码调试

在编译器中端构图开发中,需要处理字节码之间的控制流关系。当遇到 fall through(顺序执行到下一个字节码)或跳转时,需要正确设置当前基本块(CurrentBlock)。如果 CurrentBlock 未被正确设置,后续 fall through 进行 merge 的时候,会出现崩溃。(错误进行 BB 块的相连)CurrentBlock 设置错了,会导致错误判断了 fall-through 块,导致用例崩溃。

2026-02-14 12:37:53 390

原创 【AI 使用案例】如何使用提示词让 AI 提取 CommonStub & 代码迁移

优先查找简化包装函数:如果存在这种包装函数,优先使用,它们通常已经处理了复杂参数参数数量对比简单版:3参数(直接获取值)包装版:4参数(内部固定type)完整版:7参数(可指定type)代码复用原则:包装函数内部已经实现了正确的逻辑,避免重复造轮子。

2026-02-02 15:46:05 538

原创 AI agent 工具安装

付费9.9购买月度会员后,按如下流程配置一下(替换一下API Key)即可。先安装npm,要求npm11,用nvm安装较为简单。有了npm之后,安装claude。

2026-01-01 15:50:55 315

原创 基础库 Buffer 与编码&解码

在 Node.js 中,Buffer 是处理二进制数据的核心对象,广泛用于编码转换(如 UTF-8、UTF-16、ASCII 等)。

2025-07-23 16:19:19 250

原创 GC 学习笔记

用于存放那些等待处理的对象引用。

2025-06-26 19:51:26 304

原创 LLVM 学习笔记(持续更新)

cpp 文件转 LLVM IR:clang++ -emit-llvm -S test.cpp -o test.ll LLVM IR 优化:opt -O2 -S test.ll -o ./test_2.ll

2025-04-18 09:50:05 408

原创 Codeforces 757F. Team Rocket Rises Again 最短路 + 支配树

建出最短路树(DAG)之后,在最短路树上跑一下支配树,找出支配的点。答案就是爆支配点的收益,即为该点支配的 size。sdom(u) 到 u 路径中所有节点 v 都满足 sdom(v) >= sdom(u),则 idom(u) = sdom(u)给你 n 个点, m 条双向边,求爆了某个点后,从s出发的最短路距离,会改变最多的数量。u的半支配点是 大于u的所有祖先的半支配点中最小的节点,

2023-08-14 00:16:07 282

原创 【V8】【2. 内联函数、Slot】

在 V8 执行函数的过程中,会观察函数中一些调用点 (CallSite) 上的关键的中间数据,然后将这些数据缓存起来,当下次再次执行该函数的时候,V8 就可以直接利用这些中间数据,节省了再次获取这些数据的过程,因此 V8 利用 IC,可以有效提升一些重复代码的执行效率。IC 会为每个函数维护一个反馈向量 (FeedBack Vector),反馈向量记录了函数在执行过程中的一些关键的中间数据。关于函数和反馈向量的关系你可以参看下图:反馈向量其实就是一个表结构,它由很多项组成的,每一项称为一个。

2023-07-16 23:31:58 471

原创 【V8】【1. 内存布局、隐藏类Hidden Class】

JavaScript 中的对象是由一组组属性和值的集合。JavaScript 对象像一个字典,字符串作为键名,任意对象可以作为键值,可以通过键名读写键值。在 ECMAScript 规范中定义了数字属性应该按照索引值大小升序排列,字符串属性根据创建时的顺序升序排列。${${数字属性称为排序属性,在 V8 中被称为 elements,字符串属性就被称为常规属性,在 V8 中被称为 properties。

2023-07-16 22:49:26 622

原创 【编译之美】【5. 代码优化:数据流分析】

在做全局优化时,情况就要复杂一些:代码不是在一个基本块里简单地顺序执行,而可能经过控制流图(CFG)中的多条路径。我们来看一个例子(例子由 if 语句形成了两条分支语句):基于这个 CFG,我们可以做全局的活跃性分析,从最底下的基本块开始,倒着向前计算活跃变量的集合(也就是从基本块 5 倒着向基本块 1 计算)。这里需要注意,对基本块 1 进行计算的时候,它的输入是基本块 2 的输出,也就是{a, b, c},和基本块 3 的输出,也就是{a, c},计算结果是这两个集合的并集{a, b, c}。

2023-07-15 01:30:19 584

原创 【编译之美】【4. 代码优化:为什么你的代码比他的更高效】

代码优化是编译器后端的两大工作之一,弄懂它,你就掌握了一大块后端技术。代码优化的目标代码优化的目标,是优化程序对计算机资源的使用。代码优化的对象大多数的代码优化都是在 IR 上做的,而不是在前一阶段 AST 的后一阶段汇编代码上进行的,为什么呢?在 AST 上做优化,抽象层次太高,含有硬件架构信息太少,难以执行很多优化算法在汇编代码上进行优化会让算法跟机器相关,当换一个目标机器的时候,还要重新编写优化代码。所以,在 IR 上是最合适的,尽量做到机器独立,又暴露出很多优化的机会。

2023-07-15 00:46:20 449

原创 【编译之美】【3. 中间代码IR / 基本块】

IR是中间表达式,它在高级语言和汇编语言的中间。这意味着,它的特征也是处于两者之间的。AST 也是一种 IR,IR 有很多种类(AST 也是一种 IR),每种 IR 都有不同的特点和用途,有的编译器,甚至要用到几种不同的 IR。LLVM 汇编码(LLVM Assembly),是 LLVM 的 IR。LLVM 汇编码是采用静态单赋值代码形式(Static Single Assignment, SSA)的。

2023-07-15 00:09:01 576

原创 【编译之美】【2. AOT和JIT的区别】

JIT(Just-In-Time),动态(即时)编译,边运行边编译AOT(Ahead Of Time),提前编译,可以生成被直接执行的二进制代码,运行速度快、执行性能表现好,但每次执行前都需要提前编译,开发测试效率低。

2023-07-13 23:50:35 697

原创 【编译之美】【1. JS闭包问题】

在 JavaScript 和 Python 等语言里,函数可以像数值一样使用,比如给变量赋值、作为参数传递给其他函数,作为函数返回值等等。var a = 0;var b = 0;// 函数内的局部变量 var inner = function() {// 内部的一个函数 a = a + 1;b = b + 1;return b;// 返回内部的成员 } return inner;// 返回一个函数 } console . log("outside: a=%d" , a);

2023-07-13 23:23:56 292

原创 现代C++学习——C++17动态类型any与类型擦拭

std::any

2023-03-05 17:24:56 339

原创 计算机基础知识

八股文

2022-09-18 19:31:31 4893

原创 CPU缓存结构与CPU缓存寻址

缓存寻址: 物理内存地址按照 Tag、Set、Offset 来划分,这里举的例子是 2路组相联缓存,即Way=2,所谓Way,即使Set相同的情况下,缓存最多支持的Tag的数量。 假设要读的物理内存地址:0x2fbbc030,长度为44位,转成二进制为 10 1111 1011 1011 1100 0000 0011 0000。 假设划分分别是: Tag 占 30 位,为 1011111011101111,即 0xbeef Set 占 8 位,为 00000000,即 0x0 Offset 占最后 6 位,

2022-04-16 22:26:15 1245

原创 SVD分解 与 PCA降维 学习笔记

问题 有一串向量x1,x2,...,xp{x_1,x_2,...,x_p}x1​,x2​,...,xp​,其中xi=xi1,xi2,...,xinx_i = {x_{i1} , x_{i2} , ... , x_{in} }xi​=xi1​,xi2​,...,xin​ 每个 xix_ixi​ 属于 C1C_1C1​ 或 C2C_2C2​ 问题,特征向量NNN个维度有冗余,如何从NNN个维度中,选取MMM个维度,其中M<NM<NM<N使识别率最高? 这个问题其实是一个特征选择问题 主成分分析

2021-12-28 18:28:54 502

原创 Adaboost 学习笔记

视频 1. Adaboost 介绍 Adaboost 的原理是通过每次减少上一轮被正确分类的样本权值,提高被错误分类的样本权值,再进行本轮弱分类器的分类。 2. Adaboost 算法流程 2.1 权值更新 对于每个样本,定义为: (xn,y^n,un)(x^{n},\hat{y}^{n},u^{n})(xn,y^​n,un) 表示每个样本的 (feature,label,权重)(feature, label, 权重)(feature,label,权重),一开始默认权重都为1。 假设每个弱分类器一开始都不

2021-12-12 16:18:41 987

原创 leetcode

链表 反转链表 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { ListNode *pre = nullptr,*cur = pHead,*nex = nullptr; whi

2021-12-06 22:09:30 614

原创 多线程脚本python

import os, sys from multiprocessing import Process def func(id): if __name__ == '__main__': pro_list = [] for i in range(1024): p = Process(target=func, args=(i,)) p.start() pro_list.append(p) for p in pro_list:

2021-11-23 18:15:20 2237

原创 对于音频的一些简单的处理(wav-copy + sox + 脚本)

对ark文件提出scp wav-copy ark:xxx.ark ark,scp:xxx.ark,xxx.scp 对scp文件提出wav wav-copy scp的一个地址 xxx.wav 对许多wav文件生成fake的text.all find `pwd` -name ‘split*.wav’ | awk -F[/.] ‘{print $5" "$0}’ > wav.scp cp wav.scp text.all 上面的 ‘{print $5" "$0}’ 根据路径来自定义 5 这一项,

2021-07-26 01:22:14 990

原创 Codeforces Round #706 (Div. 1) A-D

A 发现只用看绝对值,而且是小的跟小的配,大的跟大的配,否则就会形成蝴蝶的形状,两边之和大于第三边,不划算(图画一画) #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 10; const long double inf = 1e9; inline int rd() { int p = 0; int f = 1; char ch=getchar(); while(ch<'0' || ch>

2021-04-01 22:10:49 201

原创 Codeforces 1487G. String Counting 【dp+容斥】

题意 你需要构造一个长度为NNN的字符串,每个字符串最多含某个字符cic_ici​,问能构造多少个不含奇回文串的字符串。 N≤400,N3<ci≤NN\leq 400,\frac{N}{3} < c_i \leq NN≤400,3N​<ci​≤N 分析 考虑cic_ici​有下界,所以至多两个字符会超过上界。 没有奇回文,就是说串中 sis_isi​ 和 si−2s_{i-2}si−2​ 不相同,考虑如果是所有字符都没有上限的话,就是前两个字符有26种填法,后面都是25种填法。 根据性质,

2021-02-19 20:38:01 390

原创 Codeforces 1461F dp+构造

题意 给你一个长度为 NNN 的 aaa 数组,数组里面都是 [0,9][0,9][0,9] 的自然数,允许你添加+++、−-−、∗*∗号,现在你希望式子最大 N≤105N \leq 10^5N≤105 分析 分析一下,只有+++和∗*∗的情况比较麻烦 考虑麻烦的点,000的左右两边肯定都是+++号 但是111的左右两边,可以是+++,也可以是∗*∗,+++是两边的数都不太大的情况,*是两边的数都大,就需要∗*∗ 而且可以发现,111的左右两边,肯定是同号的。 所以把000作为断点,找到区间[l,r][l,

2020-12-14 01:37:12 244

原创 Codeforces Round #668 (Div. 1)

A 很容易可以想到s[i]==s[i+k]s[i] == s[i+k]s[i]==s[i+k]所以每个位置s[i]s[i]s[i]都应该等于s[i%k]s[i \% k]s[i%k],然后再判断前kkk个如果是确定的000或者111,有没有超过k/2k/2k/2就可以了 #include <bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define dep(i,a,b) for(int i=(a);i>=(b

2020-09-07 16:10:25 417

原创 ACM常用模板(持续更新)

数学 快速沃尔什变换 int qpow(int x,int k,int mo) { int s = 1; while(k) { if(k&1) s=s*x%mo; x=x*x%mo; k>>=1; }return s; } void FMT(int *a,int n,int op) { int inv2 = qpow(2ll,mod-2,mod); for(int k=1;k<n;k<<=1) for(int i=0;i&lt

2020-08-12 19:34:59 886

原创 HDU6851 Heart 倍增子集卷积

分析 设多项式A=∑i=02n−1aixi,B=∑i=02n−1bixiA=\sum\limits_{i=0}^{2^n-1}a_ix^i,B=\sum\limits_{i=0}^{2^n-1}b_ix^iA=i=0∑2n−1​ai​xi,B=i=0∑2n−1​bi​xi 求C=A∗B=∑i=02n−1xi∑d⊆iadbi−dC=A*B=\sum\limits_{i=0}^{2^n-1}x^i\sum\limits_{d \subseteq i}a_d b_{i-d}C=A∗B=i=0∑2n−1​xid⊆i

2020-08-12 18:30:51 428

原创 HDU6847 Decision 基环外向树+倍增

题意 随机生成两个数v1v1v1,v2v2v2∈[0,t]\in[0,t]∈[0,t] X0=v1+v2X_{0} = v1 + v2X0​=v1+v2 Xn+1=(aXn+c)mod  mX_{n+1} = (aX_n+c) \mod mXn+1​=(aXn​+c)modm 求X∣v1−v2∣X_{|v1-v2|}X∣v1−v2∣​是偶数的概率 m>t/2,m≤106m>t/2,m\leq 10^6m>t/2,m≤106 分析 每个数变成一个点,就是一个基环外向树,设XyX_{y}Xy​

2020-08-11 20:42:36 363

原创 HDU6820 Tree 树形dp

题目描述 给你一棵节点数为NNN的无根树,每条边有权值,要求选出一棵联通的图,图里面至多允许有一个度数大于KKK的点,而且要使得边权和尽量大 N≤105,0≤k<nN\leq 10^5,0 \leq k<nN≤105,0≤k<n 分析 我们可以想用树形dp,维护每走到一个点,当前点的度数就可以大于K的最大答案。 那么就是当前点可以连边到所有的点,但是与其连边的子树内都不能有度数大于K的点。 于是可以用dp[i]dp[i]dp[i]表示iii向所有自己子树连边的最大价值 f[i]f[i]f[

2020-08-04 22:56:48 406

原创 HDU6761 Minimum Index Lyndon分解

题目描述 给你一个长度为N的串,求每个前缀的字典序最小的后缀的位置。 1≤N≤1e61\leq N \leq 1e61≤N≤1e6 分析 这个题可以用SAM和最小表示法做,当然也可以用Lyndon分解来做 不懂Lyndon分解的可以看看我巨佬学弟博客的学习笔记 发现对于Lyndon分解完后的一个Lyndon串,整个Lyndon串的最小前缀肯定就是这个Lyndon串的开头 我们可以对每一个Lyndon串做一次exkmp,这样假设从后往前扫,假设一个位置是iii,然后和这个串前缀相同的长度是extend[i]e

2020-07-22 15:56:48 531

原创 HDU6760 Math is Simple 数学变形+莫比乌斯反演

题目描述 求 ∑1≤a≤b≤n,gcd(a,b)=1,a+b≥n1ab\sum\limits_{1\leq a \le b \leq n,gcd(a,b)=1,a+b \geq n}\frac{1}{ab}1≤a≤b≤n,gcd(a,b)=1,a+b≥n∑​ab1​ 1≤T≤1e4,1≤N≤1e81 \leq T \leq 1e4 , 1\leq N \leq 1e81≤T≤1e4,1≤N≤1e8 分析 有a+b≥na+b \geq na+b≥n,所以考虑和前一项作差。 fn=∑1≤a<b≤n,gcd

2020-07-22 00:39:48 649

原创 HDU6749 Mosquito 二分+网络流

题目描述 房间是个 n∗m 的网格,一共有 k 个窗户,都在上下左右四条边上。在第 0 时刻,每个窗户对应的格子上都会出现若干只蚊子。 蚊子每个时刻可以往上下左右移动一格或者呆在原地不动。 假设这些蚊子都足够聪明,请问最少花费多少时刻,使得所有格子上都有至少一只蚊子? 蚊子在第 0 时刻不能动。 1≤m,n≤1000,1≤k≤6,1≤T≤101\leq m,n \leq 1000 ,1\leq k \leq 6,1\leq T \leq 101≤m,n≤1000,1≤k≤6,1≤T≤10 分析 二分时刻,蚊

2020-07-20 22:44:37 316

原创 HDU6747 Rotate 期望

题目描述 我们有一个圈,从内到外一共被分成了 n 个环,中间是空的。 我们把从外到内第 i 层环平分成 a[i] 份,其中 a[i] 是偶数,我们把这 a[i] 份黑白染色,第奇数个染成黑色,第偶数个染成白色。 现在我们旋转每一层,每一层都会等概率随机到一个中止位置。 问黑色的联通块数目的期望。两块黑色的区域有交点即算联通。层之间的旋转是相互独立的。 1≤n≤10,1≤ai≤1000,1≤T≤101\leq n \leq 10,1 \leq a_{i} \leq 1000,1 \leq T \leq 101

2020-07-20 22:38:38 243

原创 LibreOJ #6583. 「ICPC World Finals 2019」何以伊名始 AC自动机+fail树

题意 给你一棵树,NNN个节点,每个节点有一个字母,给出Q个询问,询问有多少个节点从下到上能够跟询问串匹配 N≤106N\leq 10^6N≤106 分析 把询问串和树并在一起,然后建立fail树,siz从深度大到深度小合并,询问就询问fail树的某个点的子树和就好了 代码 #include <bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define dep(i,a,b) for(int i=(a);i>

2020-07-19 19:49:03 400 5

原创 2020牛客暑期多校训练营(第一场) B-Suffix Array 后缀数组

题目描述 分析 发现每个后缀,只有第一个a和第一个b的位置可能是0,其他都是可以预处理出来的 就是比较每个后缀0X0Y的串。直接用后缀数组搞就好了 代码 #include <bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define dep(i,a,b) for(int i=(a);i>=(b);--i) #define pii pair<int,int> #define PB push_bac

2020-07-17 15:26:42 247

原创 P4590 [TJOI2018]游园会 dp套dp+lcs

题目描述 有两个串,一个模式串,长度为K,一个匹配串(需要自己去凑),长度N,满足以下条件: 1.两个串只含“N”、“O”、“I”三种字符 2.匹配串不能出现子串“NOI” 对于每种匹配串和模式串的最长公共子序列长度 假设为s,求每个s对应多少种不同的匹配串 1≤K≤15,1≤N≤10001\leq K \leq 15,1\leq N \leq 10001≤K≤15,1≤N≤1000 题解 首先我们可以很容易想到一个dp方程,对于匹配串匹配到第i位,对应模式串现在的匹配情况为j,而且NOI在末尾出现的情况为

2020-07-11 12:20:08 283

原创 Codeforces Round #620 (Div. 2)

E. 1-Trees and Queries 题意:给你一棵树,然后m个询问,每次询问都加一条边x-y并问a-b的距离能不能为k(询问独立) 题解: 加一条边相当于多一个环,发现一条边可以走过去又可以走回来,所以只要找出所有可能之后看%2是不是等于0: a - b a - x + loop + x - b a - y + loop + y - b a - x + loop +y - b a - ...

2020-02-16 20:46:52 334 1

原创 Codeforces 1295F. Good Contest dp+组合数学+概率

题意 给你n个区间,[li,ri][l_i,r_i][li​,ri​],在每个区间里面选整数然后要求选出的整数递减的概率 分析 很老的套路了,考虑分母就是Πi=1n(ri−li+1)\Pi_{i=1}^{n}{(r_i - l_i + 1)}Πi=1n​(ri​−li​+1) 分子的话就是单调递减的dp,右端点+1变成左闭右开离散化之后考虑两个相邻的区间我们怎么选数 下一个区间选的数要在上一个的右...

2020-01-31 00:15:24 493 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除