- 博客(11)
- 问答 (1)
- 收藏
- 关注
原创 AC自动机模板
AC自动机失配指针failfail指针指向与该节点表示串后缀相等的且长度最大的串(或前缀)的节点fail与kmp算法中的next数组还是有点不同的,next[j]表示的是j之前的前缀和后缀相等,且next指向前缀和后缀相等的前缀下一位,而fail[j]表示的是包含j这一位的前缀和后缀相等,并且指向前缀最后一位下标。 trie[now][i] = trie[fail[now]][i...
2019-08-29 00:01:19 179
原创 trie树
trie树查询某个字符串是否出现过const int maxn=1e3;int trie[maxn][maxn],book[maxn];int tot=0;v0id init(){ fill(tire,tire+maxn*maxn,0); fill(book,book+maxn,0); tot=0; }void build(string s){ int u=0; for...
2019-08-28 17:24:58 158
原创 欧几里得、拓展欧几里得和逆元的求解
欧几里得算法int gcd(int a,int b){ if(b==0) { return a; } return gcd(b,a%b);}拓展欧几里得算法最主要的核心就是 x=y y=x-a/b*yint ex_gcd(int a,int b,int &x,int &y){ if(b==0) ...
2019-08-25 14:27:58 189
原创 状压dp
题目大意:农夫有一块地,被划分为m行n列大小相等的格子,其中一些格子是可以放牧的(用1标记),农夫可以在这些格子里放牛,其他格子则不能放牛(用0标记),并且要求不可以使相邻格子都有牛。现在输入数据给出这块地的大小及可否放牧的情况,求该农夫有多少种放牧方案可以选择(注意:任何格子都不放也是一种选择,不要忘记考虑!#include <cstdio>#include <cstrin...
2019-08-23 17:56:49 141 1
原创 数位dp
首先我们要清楚数位dp解决的是什么问题:求出在给定区间 [A,B] 内,符合条件 f(i) 的数 i 的个数。条件 f(i) 一般与数的大小无关,而与数的组成有关。这里我们使用记忆化搜索实现数位dp。本质上记搜其实就是dp,下文会重点介绍dp值的使用和记录记搜过程从起点向下搜索,到最底层得到方案数,一层一层向上返回答案并累加,最后从搜索起点得到最终答案。对于 [l,r] 区间问题,我们一...
2019-08-23 10:49:47 254
原创 kmp算法模板
const int maxn=1e4+10;int nex[maxn];//记录的是前缀和后缀最大公共部分的下一位坐标,由数组前后缀最大公共长度右移一位得出 char p[maxn],s[maxn];void init(){ fill(nex,nex+maxn,0); //fill(p,p+maxn,'');}void getnex(){ int i=-1,j=0;//因为求n...
2019-08-22 14:54:30 219
原创 快速幂取模爆炸怎么办
今天做题突然想到了一道题,这题真的是坑,快速幂会爆炸#include <bits/stdc++.h>typedef long long LL;const int maxn = 5e6 + 1;using namespace std;LL mod = 10000000007;LL a[10][maxn];void init() { for (int i = 1; ...
2019-08-16 15:59:35 214 1
原创 最小圆覆盖模板
实际上是找三个点:如果第一个点没找对的话,以后遇到正确的点会不包含,如果第二个点没找对的话,以后遇到正确的点会不包含,如果第三个点没找对的话,以后遇到正确的点会不包含。所以,只有以后不出现不包含的情况,就是找对了。#include <iostream>#include <string.h>#include <stdio.h>#include <a...
2019-08-15 10:07:08 175
原创 网络流模板
就两个点,先bfs分层,在dfs搜索const int maxn=1e5;queue<int> q;struct node{ int v,c,next;}edge[maxn<<];int head[maxn],dis[maxn],currage[maxn];int tot,s,e;void init(){ fill(head,head+maxn,-...
2019-08-12 17:50:27 111
原创 st表、树状数组、线段树和主席树
//树状数组 :单点修改 (+ - * /);// 区间修改( + - 最值)其中+ -要利用查分数组来实现// 单点查询 传统方法// 区间查询 最值得话就循规蹈矩的进行查找/*但是如果使用区间修改过(查分数组)后再进行区间查询,则要进行计算一下∑ni = 1A[i] = ∑ni = 1 ∑ij = 1D[j]; 则A[1]+A[2]+...+A[n]...
2019-08-10 17:29:48 477
空空如也
博客的重要性,博客真的那么重要吗
2021-03-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人