自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wohenshuai

一双冷眼,一腔热血,一颗平常心

  • 博客(110)
  • 收藏
  • 关注

原创 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 148

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

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

2023-07-16 23:31:58 246

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

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

2023-07-16 22:49:26 282

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

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

2023-07-15 01:30:19 284

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

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

2023-07-15 00:46:20 174

原创 【编译之美】【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 217

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

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

2023-07-13 23:50:35 388

原创 【编译之美】【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 186

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

std::any

2023-03-05 17:24:56 190

原创 计算机基础知识

八股文

2022-09-18 19:31:31 3558

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

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

2022-04-16 22:26:15 969

原创 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 385

原创 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 842

原创 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 531

原创 多线程脚本python

import os, sysfrom multiprocessing import Processdef 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 2029

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

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

2021-07-26 01:22:14 655

原创 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 108

原创 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 219

原创 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 134

原创 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 318

原创 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 782

原创 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 313

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

题意随机生成两个数v1v1v1,v2v2v2∈[0,t]\in[0,t]∈[0,t]X0=v1+v2X_{0} = v1 + v2X0​=v1+v2Xn+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 281

原创 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 292

原创 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 426

原创 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 550

原创 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 217

原创 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 164

原创 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 279 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 172

原创 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 157

原创 Codeforces Round #620 (Div. 2)

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

2020-02-16 20:46:52 242 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 379 2

原创 Codeforces 1295E.Permutation Separation 线段树

题意给你一个排列,然后先分成非空的两段(一段是前缀,一段是后缀),然后每挪一个元素到另一端都有一个花费,问最少花费使得前面一段严格小于后面一段题解这种题读完题目就应该知道是数据结构,分成两段可以考虑枚举前面一段的最大的数然后就是要考虑在哪里切,线段树维护分割线一开始所有数都对该数以后的分割线都有花费(包含就要被挪出去)后来包含的就不用被挪出去,不包含的还要有花费(分割线不包含的花费增加...

2020-01-30 23:58:06 316

原创 Codeforces 1286F. Harry The Potter 子集枚举dp+数学+构造

题目描述给你n个数,你可以进行两种操作1.将一个数-x2.选两个数(不能是同一个),一个-x,一个-(x+1)当然x可能为负数问最少操作次数使得所有数都变为0题解我们考虑性质,如果将一个操作2想成一条无向边,每个数想成一个点的话。结论1:这个图只能有n-1条边,而且不成环如果超过n-1条边,自然用操作1会更好,如果成环,就把成环的全用操作1搞掉,然后剩下的肯定是一棵树,如果有单独...

2020-01-27 22:42:10 400

原创 Educational Codeforces Round 78 (Rated for Div. 2) F. Cards 第二类斯特林数

题意给你洗nnn次牌,这副牌有m张牌,其中有一个大王,你每次会抽出最顶的一张然后看完之后就放回去,假设你看过x次大王,你的贡献就是x^k,求期望贡献分析题目就是要求∑i=1n(ni)ik(m−1)n−imn\frac{\sum\limits_{i=1}^{n} \binom{n}{i} i^k(m-1)^{n-i}}{m^n}mni=1∑n​(in​)ik(m−1)n−i​然后一看这种形...

2019-12-20 21:22:03 181

原创 Codeforces 1263F Economic Difficulties dp

题意给你两棵nnn个点的树,一个是从上到下的,一个是从下到上的,最后末尾都有n个叶子结点,分别连向机器,现在你要删除尽量多的边,使得每个机器都和至少一个树的树根相连。且保证树上的点连机器的边是不交叉的n≤1000n \leq 1000n≤1000分析树上的点连机器的边是不交叉的,肯定一个结点子树能够连到的机器是连续的一段区间保证了肯定有一个点使得这个区间覆盖的值最大,就把这些区间变成区间...

2019-12-02 19:53:05 208

原创 LibreOJ #3052. 「十二省联考 2019」春节十二响 长链剖分

题意给你n个点的树,你要构造出一些点集,使得每个点集里面的任何点对都不存在祖先关系,使得每个点集的最大值的和最小n≤2∗105n\leq 2*10^5n≤2∗105分析发现对于点集的数量其实和深度有关系仔细分析,不同子树内的点集其实可以最大的和最大的消,次大的和次大的消,如果是祖先的话,就只能新开一个集合这样的话用长链剖分就好了 拿轻链去跟重链消,每条重链只会贡献这条重链长度的点集,每...

2019-11-27 20:42:23 123

原创 Codeforces 1257G Divisor Set Dilworth定理+分治FFT

题意给你一个大数由n个可重复的质数相乘,要求求出一个这个大数的约数的子集,使得这个子集里面的数两两互补为对方的倍数n≤2∗105n\leq2*10^5n≤2∗105分析考虑这样的子集是什么样子的把一个数向所有的约数连一条有向边,然后就是等于求最长反链(即选出最多的点两两不到达)又由于最长反链 = 最小链覆盖(即选出最少的链覆盖所有的点,每个点至少覆盖一次)发现这样的图是以质数的幂次k...

2019-11-26 20:50:31 379

原创 bzoj1398: Vijos1382寻找主人 Necklace 最小表示法

题意判断两个串是否循环同构。分析用最小表示法,简单地写一写首先定义三个值,i,j,k分别是两个头和当前扫到的长度如果相等就k++,不相等就i+=k+1,或者j+=k+1(大的加)然后还有可能i=j的时候要手动错开最后返回小的指针(也就是在串里面的指针就好了)代码#include <bits/stdc++.h>using namespace std;const in...

2019-11-18 19:29:41 126

空空如也

空空如也

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

TA关注的人

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