长期留坑

1.AC自动机多模式串匹配问题

对于要统计各个模式串在文本中的出现次数,对于每个当前节点不能直接暴力跳$fail$

复杂可以退化到$O(n^2)$

$aaaaaa……aaa$可以卡掉

要将$fail$指针反向建出来,明显这是棵树,然后统计其子树大小

 1 #include <bits/stdc++.h>
2 using namespace std;
3 const int N=2*1e5+100;
4 int n,tot,wh[N],cnt[N];
5 struct node
6 {
7 int son[26],fail;
8 }sh[N];
9 string s,t;
10 vector <int> e[N];
11 void build(int x)
12 {
13 int p=1;
14 for (int i=0;i<(int)t.size();i++)
15 {
16 if (!sh[p].son[t[i]-'a'])
17 {
18 tot++;
19 sh[p].son[t[i]-'a']=tot;
20 }
21 p=sh[p].son[t[i]-'a'];
22 }
23 wh[x]=p;
24 }
25 void build_fail()
26 {
27 queue <int> q;
28 q.push(1);
29 while (!q.empty())
30 {
31 int x=q.front();
32 q.pop();
33 for (int i=0;i<26;i++)
34 {
35 if (!sh[x].son[i])
36 {
37 if (x==1)
38 sh[x].son[i]=1;
39 else
40 sh[x].son[i]=sh[sh[x].fail].son[i];
41 }
42 else
43 {
44 if (x==1)
45 sh[sh[x].son[i]].fail=1;
46 else
47 sh[sh[x].son[i]].fail=sh[sh[x].fail].son[i];
48 q.push(sh[x].son[i]);
49 }
50 }
51 }
52 }
53 void match()
54 {
55 int p=1;
56 for (int i=0;i<(int)s.size();i++)
57 {
58 p=sh[p].son[s[i]-'a'];
59 cnt[p]++;
60 }
61 }
62 void dfs(int x,int fa)
63 {
64 for (int i=0;i<(int)e[x].size();i++)
65 {
66 int u=e[x][i];
67 if (u!=fa)
68 {
69 dfs(u,x);
70 cnt[x]+=cnt[u];
71 }
72 }
73 }
74 int main()
75 {
76 tot=1;
77 scanf("%d",&n);
78 for (int i=1;i<=n;i++)
79 {
80 cin>>t;
81 build(i);
82 }
83 build_fail();
84 cin>>s;
85 match();
86 for (int i=2;i<=tot;i++)
87 {
88 e[i].push_back(sh[i].fail);
89 e[sh[i].fail].push_back(i);
90 }
91 dfs(1,1);
92 for (int i=1;i<=n;i++)
93 printf("%d\n",cnt[wh[i]]);
94 }

2.KMP询问字符串的最短循环节

如$abcabcabc$的最短循环节为$abc$

先处理出这个字符串的前缀函数

如果循环节的长度为$k$,字符串的长度为$n$

那么$nxt[n-1]=n-k$

移项可得$k=n-nxt[n-1]$

那么只要满足$n-nxt[n-1]\mid n$,$n-nxt[n-1]$就是最短循环节,否则就是$n$

 1 nxt[l]=0;
2 for (int i=l+1;i<=r;i++)
3 {
4 int j=nxt[i-1];
5 while (j>0 && ch[i]!=ch[j+l])
6 j=nxt[j-1];
7 if (ch[i]==ch[j+l])
8 j++;
9 nxt[i]=j;
10 }
11 int N,M;
12 N=r-l+1;
13 M=N-nxt[r];
14 if (N%M==0)
15 return M;
16 else
17 return N;

3.对于分段函数迭代

比如CF1271E

在画出函数转移树的时候,要注意不同对应法则的连边的两个数字是否满足该函数的不同的定义域

如CF1271E这道题,一定要注意$f(x)=x-1$是在偶数情况下满足,所以在二分时要分偶数奇数考虑

4.Splay的区间操作和权值操作

对于区间操作,在建树时就要将$1$和$n+1$建入平衡树中,避免进行区间操作时越界

对于权值操作,在建树时要将$inf$和$-inf$建入平衡树中,避免求前驱后继时越界

5.对于最小费用最大流的建图

在建图的时候一定要注意,建出来的图在满足题目限制条件的时候,跑费用流时,是不是满足最大流的情况

也就是说,要将题目中所有的限制条件建的边是要能跑出最大流的

否则不满足最大流,是谈不上最小费用的

6.高斯消元

在将把主对角线上的矩阵元素替换成非0元素时候,需要在对$i$行进行处理的时候之前才进行替换

不能先将所有的行替换好,在进行消元

2

1 1 2

3 3 6

就无法判断无穷解的情况

正确做法
错误做法

7.FFT的使用范围

FFT处理的是如同$c_i = \sum\limits_{j=0}^{i}a_jb_{i-j}$的卷积形式

FFT只是DFT的加速,处理出的是在$n+1$个单位元点下多项式的取值

FFT只能处理$2^{k}$次的卷积,对于不是$2$的幂次长度的卷积

对于两个长度为$n$的多项式,其卷积的长度应为$2n-1$,那么要找到$k$,使得$2^{k}>=2n-1$

然后进行循环卷积

8.主席树处理区间第k大

主席树相当于处理了一个前缀和,是满足可加、可减性的

所以也可以处理树上的问题

处理第k大的思想主要就是维护前缀和

9.树形背包

如果是在枚举子树的时候先累加$size$,那么复杂度为$O(n^3)$

需要先进行转移再累加$size$

这样相当于 $dp$ 的时候是当前子树大小乘上这个子树之前所有子树的大小之和,可以理解成该子树中每一个点与之前的所有子树里每一个点两两组成的点对被计算一次,这样的话每一对点都只会被计算一次(在它们的 $LCA$ 处),时间复杂度$O(n^2)$

并且注意要倒序转移

for (int p=first[x];p!=-1;p=nxt[p])
{
int u=point[p];
if (u==fa) continue;
for (int i=sz[x];i>=0;i--)
{
for (int j=sz[u];j>=0;j--)
{
if (i+j>背包容量) continue;
dp[x][i+j]=max(dp[x][i+j],dp[x][i]+dp[u][j]+价值函数);
}
}
sz[x]+=sz[u];
}

10.斜率优化--二分凸包

在二分凸包上的斜率的时候要注意要特判凸包上第一个点是否就是直线所切到的最佳决策点

如维护下凸包的时候,判断凸包上第一条线段的斜率是否大于当前直线的斜率,若大于直接返回第一个点

11.整体二分

在分治过程要函数开头判断当前是否还有操作的答案在$l$,$r$之间,如果没有直接返回,可以极大地减少常数

void solve(int x,int y,int l,int r)
{
if (x>y) return;//important!!
if (l==r)
{
……
}
……
}

12.左偏树的$dis$

在合并的过程中一定要保持$dis[0]=-1$来保证复杂度的正确

可以在$pushup$中开头加一句,以免有复杂操作会改变$dis[0]$的值

并且在$pop$的时候$dis$,$son$要重置为$0$,在重复利用时若$dis$不为$0$会出现问题

一些bug的更多相关文章

  1. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  2. a标签点击跳转失效--IE6、7的奇葩bug

    一般运用a标签包含img去实现点击图片跳转的功能,这是前端经常要用到的东西. 今天遇到个神奇的bug:如果在img上再包裹一层div,而且div设置了width和height,则图片区域点击时,无任何 ...

  3. 关于 Chrome 浏览器中 onresize 事件的 Bug

    我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...

  4. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  5. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  6. 了不起的 nodejs-TwitterWeb 案例 bug 解决

    了不起的nodejs算是一本不错的入门书,不过书中个别案例存在bug,按照书中源码无法做出和书中相同效果,原本兴奋的心情掺杂着些许失落. 现在我们看一下第七章HTTP,一个Twitter Web客户端 ...

  7. 应该是Angular2的一个bug?

    为了应对未来的趋势,及时赶上下一趟互联网技术,我最近也在通过具体项目研究angular2,首先必须要吐槽的是,学习angular2的成本本身不高,但是一堆的工具.配置实在让人 很是焦灼,就像asp.n ...

  8. 记录一次bug解决过程:数据迁移

    一 总结 不擅长语言表达,勤于沟通,多锻炼 调试MyBatis中SQL语法:foreach 问题:缺少关键字VALUES.很遗憾:它的错误报的让人找不着北. 二 BUG描述:MyBatis中批量插入数 ...

  9. 关于MJRefresh的下拉加载数据bug

    当没有更多数据的时候显示NoMoreData 我的理解是先结束刷新再显示没有更多 今天之前一直没发现有问题 贴之前的代码 [self.collectionView reloadData]; [self ...

  10. [异常特工]android常见bug跟踪

    前言 对app的线上bug的收集(友盟.云捕等)有时会得到这样的异常堆栈信息:没有一行代码是有关自身程序代码的.这使得对bug的解决无从下手,根据经验,内存不足OOM,Dialog关闭,ListVie ...

随机推荐

  1. 解决Dubbo无法发布被事务代理的Service问题

    在HelloServiceImpl类上加入@Transactional注解后,虽然工程可以正常跑起来,但是通过dubbo管理控制台可以看到里面并没有服务发布上来. 此时启动服务提供者和服务消费者,并访 ...

  2. three.js学习5_渲染器

    THREE.WebGLRenderer WebGL Render 用WebGL渲染出你精心制作的场景 介绍 在之前的介绍中, 已经介绍过场景, 相机, 光源, 有了这些后, 就可以形成一个可观的三维展 ...

  3. 039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述

    039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述 本文知识点:循环结构概述 循环结构主要内容 while 循环 do-whiile ...

  4. 轻松理解JVM的分代模型

    前言 上篇文章我们一起对jvm的内存模型有了比较清晰的认识,小伙伴们可以参考JVM内存模型不再是秘密这篇文章做一个复习. 本篇文章我们将针对jvm堆内存的分代模型做一个详细的解析,和大家一起轻松理解j ...

  5. 【转载】可能是世界上最牛逼的网站统计程序——Matomo

    大家做网站的时候一般都会使用网站统计程序.通常,国内网站会使用百度统计.CNZZ等,而国外网站则会使用Google Analytics等统计.国内的统计程序普遍功能不太丰富,且响应速度一般.Googl ...

  6. RHSA-2017:2907-重要: wpa_supplicant 安全更新

    [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 修复命令: 使用root账号登陆She ...

  7. [java进阶]关于多线程的知识点

    线程和进程的区别? 进程: 是程序得一次之星过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序就是从一个进程的创建开始,到进程的结束的过程. 在java中当我们的main函数运行时就是 ...

  8. lumen-ioc容器测试 (5)

    lumen-ioc容器测试 (1) lumen-ioc容器测试 (2) lumen-ioc容器测试 (3) lumen-ioc容器测试 (4) lumen-ioc容器测试 (5) lumen-ioc容 ...

  9. spring boot: 设计接口站api的版本号,支持次版本号(spring boot 2.3.2)

    一,为什么接口站的api要使用版本号? 1,当服务端接口的功能发生改进后, 客户端如果不更新版本,    则服务端返回的功能可能不能使用,    所以在服务端功能升级后,     客户端也要相应的使用 ...

  10. Go go.mod入门

    什么是go.mod? Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理. Go.mod其实就是一个Modules,关于Modu ...