- 博客(91)
- 资源 (6)
- 收藏
- 关注
原创 VSCode python插件:找不到自定义包导致语法解析失败
vscode的默认python插件可没法聪明到根据这句话去找这个包,这就会导致后续代码中使用了这个库的部分无法享受自动补全、语法高亮等功能的便利性
2024-02-07 00:09:12
1166
1
原创 perf性能分析
可能安装在/usr/bin/perf,如果版本不对,可以看看 /usr/lib/linux-tools/[version]/ 下有没有perf,如果有的话替换一下就可以。
2023-10-16 00:06:14
221
原创 LLVM安装及使用踩坑
本文记录安装源码版LLVM过程中遇到的一些困难起初我参考了Getting Started with LLVM Libraries(Getting Started with LLVM Core Libraries(中文版) — Getting Started with LLVM Core Libraries 文档)一书的第一章安装部分,成功安装了3.4版本,并且根据教程自定义了安装路径为/usr/local/llvm。但很快问题来了,由于我希望在编写自定义pass时,可以不在transform目录下写
2021-10-08 19:42:58
16980
1
原创 pyparser语法节点用法解析
上篇文章:用pycparser解析C语言踩坑记录简单的使用参考GitHub库中给的example即可。如果想要进行深度使用,可以参考c_ast.py和_c_ast.cfg文件,在里面详细描述了不同类型节点的定义。接下来我会对此详细描述,并介绍这些节点的用法。基类所有类型的节点都是由Node类继承而来,例如show函数用来递归地打印一棵语法树可选是否输出属性名、该段代码的起始坐标(第几行第几列)等,看注释即可。其中coord类在plyparser.py中定义.
2021-04-11 23:15:05
785
原创 用pycparser解析C语言踩坑记录
pycparser是python的一个用于解析C语言的第三方库,相比于LLVM、CDT等安装使用过程较为简洁,它的官方开源库为https://github.com/eliben/pycparser。以下步骤记录我的安装和初步使用过程安装没什么好说的,直接pip install pycparser如果遇到下图错误,有可能是网络原因,可以尝试 -i 添加镜像再下载即pip install pycparser -i http://pypi.douban.com/simple/ .
2021-03-28 16:48:20
3116
4
原创 递归妙用:不用for循环实现回文串分割
问题来源是某学校的python作业(比我们学校教的好多了),题目要求如下:题目要求定义semidrome(半回文)串:由若干回文串(长度>=2)拼接而成,例如:aabb(aa和bb)、ababcbii(aba和bcb和ii)。现要求实现 is_semidrome(s) 函数,判定字符串s是否是半回文串。核心要求:不能使用for和while循环,尽量递归。然后复杂度呢不用怎么考虑,数据应该比较小。我这里直接把能够通过oj的代码贴出来,大家一看就明白了。def is_semidrome(
2021-03-09 00:45:21
250
1
原创 面试&考研基本数据结构和算法——排序
排序稳定性:具有相同关键字的记录排序后次序不变。代码中数组都从0开始冒泡排序稳定,序列有序时O(n)vector<int> BubbleSort(vector<int> v){ bool f=true; while(f){ f=false; for(int i=0;i<n-1;i++){ if(v[i]>v[i+1]){ f=true;
2020-08-29 17:39:04
222
原创 基础向:如何输出一棵漂漂亮亮的树
在搞编译原理实验的时候,最后要求输出一棵漂漂亮亮的语法树,便突然想起了二叉树输出这个在初学编程时困扰过我的问题,索性就在这里把它解决了吧。ps:对于只是想明白怎么输出树的同学,博客中编译原理相关的知识可以自行跳过。先来看看最终效果应该能满足大部分人的要求…?符号是用string定义的,如果有长度不为1的情况也可以支持首先来看看treeNode的定义我们的输出结构大概是这样,整棵树会被划分成若干行(包含深度相同的一行节点),有一个输出数组layer记录该行所有节点的输出信息,然后通
2020-05-26 21:08:41
791
原创 牛客多校graph games(部分分块+哈希)
https://ac.nowcoder.com/acm/contest/883/A题目大意,给出一个无向图,设S(x)表示x的临近点集合,临近点即通过一条边直接相连的点。有两种操作,1是把边集合(读入顺序)从l到r的边状态反转(相连变断开,断开变相连),2是询问两个点的临近集是否相等。这里首先涉及到的一个难点是如何表示临近集,我们采用异或哈希的方式,首先为所有点分配一个随机权值,这里用到了...
2020-04-26 11:59:41
261
原创 思维:线段树dp
https://ac.nowcoder.com/acm/contest/881/I不得不说这题是真的难,看题解都差点没用理解。)给定平面上若干(1e5)点,每个点ab两个权值,要求将其分为两组,a组的a权值和加b组的b权值和最大,划分条件转化一下就是,不能有a出现在b的右下,也就是要找到一条不降的折线,其上是a,其下是b。我们认为...
2020-04-23 20:54:36
426
原创 CF593D. Happy Tree Party(树剖模板)
https://codeforces.com/problemset/problem/593/D看到题目是逐步向下取整我还想了一下……其实对于整型来说和把路径上的值乘在一起统一除效果是一样的。这题还有一个点就是它的权值是依附于边而非点,对此我们可以把每个点和它连向fa的边绑定,把这个权值重新转换到点上,因为每个点只有一个fa。而对于根我们可以给它一个向上的虚边赋值1,这个过程用一个简单dfs...
2020-04-21 16:05:59
217
原创 使用freopen重定向输入流后cin出现问题的解决方案
写作业代码需要读文件,图方便直接用了freopen重定向输入流,可是后面发现还要切换回控制台输入。于是查资料。发现大多博客都介绍用freopen("CON", "r", stdin); 这句来改回去,可是实际测试中发现使用了之后scanf是正常读入了,cin却不行。灵光一现想到用cin.clear()清空一下输入流试试,果然可以了...
2020-04-15 20:52:58
1089
3
原创 牛客多校 E Explorer(时间分治+可持久性并查集)
题目cdq分治,也叫时间分治,核心概念就是对于若干个操作和查询,维护每次操作在哪个时间段中有效。这道题中的size就是时间,我们维护某个size区间上点的连通状况(用并查集维护),进行查询时进入某个点则连上这个点上的边,退出它时把并查集再复原。#include<bits/stdc++.h>using namespace std;#define lson rt<&...
2020-04-14 23:29:43
248
原创 时间分治
cdq分治,也叫时间分治,核心概念就是对于若干个操作和查询,维护每次操作在哪个时间段中有效。https://ac.nowcoder.com/acm/contest/888/E?&headNav=acm这道题中的size就是时间,我们维护某个size区间上点的连通状况(用并查集维护),进行查询时进入某个点则连上这个点上的边,...
2020-04-14 10:20:20
177
原创 CF1303E序列自动机+dp
序列自动机其实就是一个数组,记录了每个位置后第一次出现字符c是哪个位置,用于解决一些子序列的问题,它共有n+1个状态,即位置0-n,每个状态都是子序列的接受状态。这个数组在On内完成构建CF1303E:给字符串s、t问能不能从s中抽取两个不重复的子序列拼接成t。由于长度最大400,考虑枚举两个子序列的分界点,然后两个指针指向两个序列...
2020-04-13 23:16:51
230
原创 假日赛boss
https://ac.nowcoder.com/acm/contest/4862/E给n(<=20)头牛,每头牛有自己的身高、重量、承重,要让它们叠罗汉并高度至少是h,并要求剩余的载重量最大(说明最稳),求这个最大剩余载重量。这题初看直接暴搜剪枝,,仔细一想才发现复杂度不对,是20!的。然后就没辙了,直到看了这篇博客,果然还...
2020-04-12 16:08:45
75
原创 双哈希
和自然溢出法不同的是,这种方法需要取模,并且是两套base mod。每次做哈希操作时,需要两套哈希值都一致,这就大大降低了冲突概率。但是据说常数比较大,并且写起来麻烦一些。CF1320D对于一个01串(2e5),给出两种操作:110<->011,可以执行任意多次,q(2e5)个提问,问这个串中某两个子串能否通过这两种操...
2020-04-10 10:49:11
845
原创 字符串模板(后缀数组、后缀自动机、回文树)
再整理一遍板子后缀数组例题cf432D:问对字符串s,对于所有的前缀,当它等于同长度后缀时,这个子串一共在s中出现多少次。后缀数组求lcp是logn,显然直接二分即可。复杂度nlogn1234567891011121314151617181920212223242526272...
2020-04-07 03:38:39
132
原创 上下界网络流
cf704D给棋盘上n个棋子染色,红黑两种,代价不同,有m个约束,要求某一行或某一列的红黑棋子数差不能超过某一数值。求最小代价的染色方案。上下界网络流的思路就是分别减去最低流量,剩余的放在图中跑最大流,对于原有大于零下界的边就通过新建超级源点ss和汇点tt解决,即出点多出的连向汇点,入点缺少的从源点补充。合法要求:源点s发出的必须...
2020-04-05 21:50:57
170
原创 上下界网络流 cf704D
cf704D给棋盘上n个棋子染色,红黑两种,代价不同,有m个约束,要求某一行或某一列的红黑棋子数差不能超过某一数值。求最小代价的染色方案。上下界网络流的思路就是分别减去最低流量,剩余的放在图中跑最大流,对于原有大于零下界的边就通过新建超级源点ss和汇点tt解决,即出点多出的连向汇点,入点缺少的从源点补充。合法要求:源点s发出的必须能跑满,否则原有的平衡条件就打破了,无可行流。对于原本就...
2020-04-05 18:28:53
173
原创 长链剖分优化树上dp
长链剖分可以把维护子树中只与深度有关的信息做到线性的时间复杂度。例题cf1009f给一棵树,定义每个点的dom值为,以该点为根的子树重中,节点数最多的那一层的层数,即那一层距离这个根节点有几条边,如果多层节点数相同,取最小的层数。例如单独叶节点的dom值是0,一条垂直的链的dom值也是0(每层数量都是1,取最前面的)定义dp[i...
2020-04-01 00:25:46
428
1
原创 树上启发式合并(dsu on tree)一篇就会!理解其他博客的基础
这个算法真是研究了好久才明白……众多博客真的不是面向小白的模板拿cf600E举例子,问题是给一棵有根树(rt==1),每个节点有一个颜色值,树的节点数和颜色值的范围都是1e5。对于每个节点我们定义其子树中数量最多的那个颜色值为主颜色(可以有多个并列),现要给出每个节点的主颜色的值的和。首先想到暴力做法,直接去挨个点算他们的子树的答案,统计子树中每种颜色的数量并维护当前主颜色的和。这种算法显...
2020-03-29 22:01:20
332
1
原创 树上启发式合并模板
这个算法真是研究了好久才明白……众多博客真的不是面向小白的模板拿cf600E举例子,问题是给一棵有根树(rt==1),每个节点有一个颜色值,树的节点数和颜色值的范围都是1e5。对于每个节点我们定义其子树中数量最多的那个颜色值为主颜色(可以有多个并列),现要给出每个节点的主颜色的值的和。首先想到暴力做法,直接去挨个点算他们的子树的答...
2020-03-29 08:37:35
214
2
原创 spfa&差分约束模板
cf1131D给出一个n*m关系表,有<>=三种关系,要求为这n+m个对象分配一个值,使得满足约束关系且最大值最小。用差分约束,>转化为>=x+1。=转化为>=且<=。如果y要比x至少大1,就建立边x指向y。对于这样一张图,满足所有要求其实就意味着能走的边都走(满足关系),不能满足的点就松弛(变大),...
2020-03-28 17:00:38
155
原创 割点和桥模板
寻找连通图的割点和桥用的也是tarjan算法,我们计算每个点不经过父亲能到达点的最小dfs序,如果是大于等于父亲的,则说明去掉父节点,该点即无法同上面连通,所以父节点是割点。桥类似,我们对于每个点标记它到父亲的那条边是否是桥。cf1277E:给出一个图求对于两点ab,有多少对xy使得从x到y的每一条路径都必经ab。1234...
2020-03-27 17:45:15
224
原创 强连通分量模板
知识背景:首先明确强连通分量(strongly connected component)的概念,从任一顶点能够到达任一其他顶点的有向图 的顶点子集,而任意有向图均可以分解成若干不相交的scc。把每个scc视作一个顶点,可得到一个DAG。实现算法:两次dfs,第一次 dfs 遍历将顶点后序(post order)记录下来vs(vect...
2020-03-24 14:35:10
122
原创 treap(可持久性)模板
普通treap:参考https://www.csdn.net/gather_2a/MtTacg3sMTE0NS1ibG9n.htmlcf702f:将所有人的钱数放入平衡树,每次按照可选衣服的价格将树一分为二,对于有购买能力的一棵树上的人钱数减去衣服价格,然后将剩余钱数小于c-1的再塞回第一棵树,最后将这两棵树合并。由于是非持久性...
2020-03-22 04:09:28
123
原创 codeforces/1312E(区间dp)
题目这道题不管从内容还是数据范围看起来都像是区间dp,可一时想不出来怎么构造出一个满足无后效性的区间状态,看了一眼题解才顿悟。分两步走,第一步我们求出所有的dp[l][r],表示[l,r]区间可以最终转化为的一个数,如果无法转化则为零,这一步的巧妙就在于包含了足够的信息来“总结”这个区间。第二步我们用前缀dp,设dp2[i]表示前i个元素最少合并为几个点,容易求出。#include&...
2020-03-21 22:26:25
433
原创 数位dp模板
本质是记忆化搜索,一般求解区间[l,r]内有多少数字满足要求。我们可以拆分问题为solve(r)-solve(l-1)或solve(r)-solve(l)+judge(l)。注意到整个区间(例如[0,999])在很多地方重复使用,所以对它记录。例题:cf628D123456789101112131415...
2020-03-18 09:56:44
182
原创 欧拉回路模板
直接介绍复杂度最低(O(n+m))的Hierholzer方法。它能帮我们找到一条欧拉回路。 欧拉回路指不重复经过所有边的一条回路,在有向图中,如果满足每个点入度=出度则存在欧拉回路。在无向图中,满足每个点度数为偶数则存在欧拉回路。它具有这样的性质,即从一个欧拉图中去除一个小欧拉图,剩下的仍是欧拉图,去除一个点及其所...
2020-03-16 00:24:02
247
原创 三分法
二分用于在单调序列上以logn的时间确定某个值,三分则用在凸函数上,即先增后减序列,可以找它的极值。我们需要mid=(l+r)/2和midmid=(mid+r)/2这两个分界点,前者大则令r=midmid,否则令l=mid。例题:cf939E123456789101112131415161718...
2020-03-15 13:00:24
172
1
原创 lca倍增模板
lca即最近公共祖先,倍增法可以在O(n)的预处理后以每次logn的代价进行查询操作。思路:预处理出fa[n][i]数组,表示第n号点的第(1<<i)个父亲,之后在寻找u、v的lca时,可以对二进制上的每一位进行向上跳跃。例题:cf1304E给出一棵树,有q个询问,格式(x,y,a,b,k)。意为对x,y点连边,求问...
2020-03-14 03:56:20
158
97数模_零件的参数设计.rar
2019-05-16
算法导论高清扫描版
2018-08-29
短码之美pdf
2018-08-29
白帽子讲Web安全电子书
2018-08-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人