kmp自身匹配和两者匹配,都是i和j+1匹配(让两个字符串从1开始) 自身匹配找ne【】数组的值,i从2开始,j从0开始 两者匹配,i从1开始,j从0开始 #include<iostream> using namespace std ; const int M = 1e5 + 10 , N = 1e6 + 10 ; int a , b ; char s[N] , p[M] ; int ne[M] ; int main() {
Hash表(散列表) 复杂度O(k*n)k为较大的常数用处:在不适用动态内存的情况下,充分利用静态内存(不需要把数组开的贼大)判重(和map功能相似)避免hash冲突:链地址法代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<stack> #include
1.分模块 (1)在store的文件中添加一个js文件 export default { // 代表这是一个命名独立的空间,不会与index.js里的命名冲突与污染 namespaced:true, state:{}, mutations:{}, getters:{}, actions:{}, } (2)在store的index.js中引入 // 引入 import son from './son.
参考论文 求解范围:(动态树问题) 树上路径查询、修改 动态连边、删边 换根 lca 算法逻辑 概念: 类似树链剖分,把一棵树拆成许多链,每个链用splay维护(链上的为实边,否则为虚边),splay中以\(dep\)为关键字(左浅右深),splay里点之间用\(fa\)和\(son[0/1]\)连接,不同链之间用\(par\)连接(par是单
题意:给出一棵树,每个结点是黑色或者粉色。每经过一个结点一次,这个结点变一次色(一开始站在根节点时不变色)。求一条路径,沿此路径走完后整棵树变成黑色。 解:到达一个结点后需不需要往下走取决于子树中有没有粉色结点,于是先dfs一次处理子树。然后开始解,如果有粉色结点,就递归递进去。回
P5521 [yLOI2019] 梅深不见冬 题目链接 (这题的暴力太难写了QAQ) 思路:看完题目很容易发现,在某点放一朵梅花本质上就是用 DFS 的方式遍历该点的子树。 那么我们只要找到在该点的子节点上放梅花的最小花费就可以了。 本题的特殊样例已经在一定程度上提醒了我们正解的思路。 首先观察
数据结构 class Node { Node* inputs; Node* outputs; } 1. 判断父子节点能否fuse,如果能,则push to fusing_array[父,子]。(注意去重) 2. 对于每个父子节点,调用子节点.fuse(父节点) 伪代码: son.fuse(father) : for i in son.inputs: if i == father.outputs[0]:
Trie树可以用来存储前缀字符串/数组。 可以用数组进行模拟 son[N][26] 记录节点的son cnt[N] 记录以当前节点为最后字符的字符串出现的次数 idx当前用到的节点 例题 143. 最大异或对 #include<iostream> using namespace std; const int N=100010; int son[N*31][2];int idx=0
这周进行了前后端分端,经过长时间的踌躇,选择了后端,但后端的内容确实有点难理解,费脑子,费头发,但还是要打好基础,毕竟java也是这学期自己的专业课,学好Java才能更好的开展每学期的专业课,像python之类的,接下来和大家分享一下,这星期学后端时遇到的一些问题和解释,及一些小知
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=105; 4 int n; 5 int in[N]; 6 vector<int>G[N]; 7 int main() 8 { 9 scanf("%d",&n); 10 queue<int>q; 11 for(int i=1;i<=n;i++) 12 {
题目大意: 给定一棵树,求出一对起点和终点,使得从起点随机游走,到终点停下的期望步数最多,输出这个期望步数 solution: 其实不难 树形 \(dp\) 首先,另 \(f[x]\) 表示从 \(x\) 点走到他父亲的期望步数 它有可能先走到某个儿子里,然后再回来,也有可能直接走到它的父亲 因此: \[f[x]=\frac{1}{|
动画效果 当我们想做类似轮播图这种动画效果时,可以先封装好一个函数,如果想让谁拥有动画效果,直接调用就可以。 function aimate(obj, target, callback) { // obj为动的盒子,target为滑动的目标距离 clearInterval(obj.timer); obj.timer = setInterval(function() {
AIM Tech Round 3 (Div. 1)C.Centroids 题意:题意:给一棵树,问树的每个点能不能通过仅一次删边加边变成质心,所谓质心即删掉该点和相邻的边剩下的每个联通块大小都小于等于n/2。n ≤ 400000 思路:树形dp+换根dp $umax[i]表示除了以点i为根的树,整颗大树的剩余部分中,结点数最多的子树的值
类加载分为三步: 1.加载: 将class文件字节码加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class 对象。 2.链接:将java类的二进制代码合并到jvm运行状态的过程 (1)验证: 确保加载的类信息符合JVM规范 (2)准备: 为static修饰的类变量分配没
DSU on tree ! 解决树上问题的利器,复杂度虽然没有长链剖分优秀,不过思考简单而且代码优美,是树上维护答案的好帮手。 例题:DSU on tree 应用范围 解决一些子树的离线静态问题,巧妙地将暴力 \(O(n^2)\) 的复杂度优化到 \(O(nlogn)\)。 算法思路 回溯整棵树维护子树大小以及重儿子,为后
heap sort 参考链接 满二叉树性质: parent=(i-1)/2,son_left=i*2+1,son_right=i*2+2 建堆 首先对数组建立大顶堆:父节点一定大于子节点 对每一个非叶节点递归进行比较(堆化) 最后一个非叶节点 结论:最后一个叶节点的父节点 证明:假设最后一个叶节点a的父节点b不是最后一个非叶节点。
vue3.0父子组件的通信 Vue3.0组件通信 Vue3.0组件通信 vue3.0脚手架setup内部的组件通信 1、父到子通过props 父组件 <template> <div > <Son data="currentRole.arr"></Son> </div> </template> <script lang="ts"> import { defineC
长链剖分优化 \(dp\) 模板 不过这 \(dp\) 真毒 \(\text{Code}\) #include <cstdio> #define RE register #define IN inline using namespace std; typedef long long LL; const int N = 1e5 + 5; int n, h[N], tot, len[N], son[N]; struct edge{int to, nxt;}e[N <<
在 Java 中强制类型转换分为基本数据类型和引用数据类型两种,这里我们仅讨论引用数据类型的强制类型转换。 在 Java 中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强
封装函数如何使用? 封装函数可直接在 common 中进行保存 使用的时候直接调用即可: if(!function_exists("get_cate_list")){ //返回无限级分类菜单 function get_cate_list($list,$pid=0,$f=0){ //声明一个静态数组存储处理后的数据 static $arr = [];
题目大意 一棵树,每次加一个节点,并且询问每次加后的树的直径 解题思路 可以知道,每次加点后最多对树的直径的影响为 \(1\) 。而且有一个重要性质:加进的这个叶子如果能对答案产生贡献,那么这个叶子和原来直径一定有公共端点,所以我们求出每个状态下的 \(u和v和ans\) ,每次要么不更新,要
JVM类初始化过程 目录 JVM类初始化过程类加载机制加载连接验证准备解析 初始化使用卸载 示例Father.javaSon.javaA.javaB.java 文字流程结果展示相关内存图 类加载机制 类加载机制主要有三步: 加载、连接、初始化。 加载 把编译好的class文件加载进内存 (1.7及之前
题面传送门 看到字符串子串匹配啪的一下很快啊一个SAM扔上去了 先把\(M\)个串的SAM建出来,发现其实不用广义SAM,隔一个#插就好了。 然后对于每个询问串就可以在SAM上先刨除每个\(i\)结尾在模式串中最长匹配多少。 显然L有单调性所以直接二分然后\(O(n^2)\)dp就可以得到答案了。 又有
<script> function Father(name,age){ this.name=name; this.age=age; } function son(name,age){ Father.call(this,name,age); } var ss=new son("bob",22); conso
int n;const int N=4e5;const int LOGN=22; namespace ST{ const int M=N*LOGN; int son[M][2],ct[M]; int node_count; int new_node(int ls,int rs,int cnt){ int t=++node_count; son[t][0]=ls; son[t][1]=rs; ct[t]=cnt;