自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

taotao 的大学墓志

keep thinking! keep learning!

  • 博客(15)
  • 资源 (1)
  • 收藏
  • 关注

原创 FFT介绍

写在前面详细内容请参见《算法导论》3rd edition,或者参见博客 FFT算法学习笔记 这里只展示它的迭代形式的代码IterativeFFT#include <iostream>#include<cmath>#include<cstdio>#include<complex>#include<algorithm>using namespace std;typedef complex<

2016-10-30 23:01:54 1166

原创 bestcoder #89 (hdu 5495) Fxx and game(单调队列优化dp)

很水的dp题,考虑dp[i]dp[i]表示xx为ii的最小花费, dp[i]=min{dp[j]+1,dp[i/k]+1},当k|i,i−t<=j<i,,即i的前t个数dp[i] = min\{dp[j]+1,dp[i/k]+1\},当k|i,i-t<=j<i,,即i的前t个数由于tt可能会很大,所以可以用单调队列维护一下对于每个ii的前tt个数,的最小值。由于本人初次接触单调队列,所以写的有

2016-10-30 01:51:24 371

原创 monotone queue(单调队列)

描述单调队列是这样一种东西,给你一个队列,让你在队尾添加元素,在队首删除元素,时刻维护队列中的最大值,使其查询时间为O(1)O(1)实现可以用一个辅助队列来维护其中的最大值从而让其原队列不做改变,并且该队列中的元素是单调的,具体来讲可以用两个stl中的deque( d ouble e nd q ueue),来维护,其实现非常简单。push在队尾插入一个元素的时候,主要做的修改在辅助队列中,对于辅助队

2016-10-30 00:46:32 2639

原创 字符串匹配

这里简要的总结一下字符串匹配算法,包括KMP,Rabin_Karp,和AC自动机KMP这个算法利用的是子串前缀的信息,对于模式串,P,与文本串T,而言当我们匹配到P[q]与T[i]的时候,我们可以知道,此时p[0,…,q-1]一定已经与T[i-q+1,…i-1]是匹配好了的,所以我们移动子串的时候就不必用暴力的方法一个一个的移动,而是移动到 Pk⊂Pq−1P_k\subset P_{q-1}即P[

2016-10-25 00:44:51 635

原创 LA 3026 Period (KMP失配函数)

KMP失配函数的意义对于一个周期串,他的最小周期为(i−f[i])(i-f[i]),k∗(i−f[i])=ik*(i-f[i]) =i,有了这些东西之后这道题就可以很easy的A掉了char T[maxn];char P[1009];int f[maxn];int n;int main(){ int kase = 0; while(scanf("%d",&n)&&n) {

2016-10-21 23:15:57 641

原创 LA 3492 Remember the World(Trie + dp)

题目链接: LA 3492 给一个由S个不同单词组成的字典和一个长字串。把这字符串分解为由若干个单词的连接,有多少种方法。 分析: did_i表示以第i个字母开头的方法数,则di=sum{di+len(x)}d_i = sum\{d_{i+len(x)}\}其中,x为S[i,,,,L]的前缀。用前缀树优化一下这样找前缀,最多需要100次。 复杂度100∗105100*10^5#includ

2016-10-20 22:27:21 444

原创 Trie

前缀树struct Trie { int ch[max_node][sigma_size]; int sz = 0; int val[max_node]; void clear(){sz = 1 ; memset(ch[0],0,sizeof(ch[0]));} int idx(char c){return c-‘a’;};void add(cha

2016-10-20 22:12:25 370

原创 Uva 11990 ``Dynamic'' Inversion(分桶法+平方分割)

题目链接 Uva 11990 “Dynamic” Inversion 动态的逆序对问题。分析可以把(i,A[i])(i,A[i])映射到平面上,这样的话映射到的平面是[0,200000]X[0,200000], 这样对于一个点(i,A[i])(i,A[i]),来说,平面区域的左上方,及右下方就是能和这个点构成逆序对的点。 显然用数组储存肯定是不行的,考虑对平面分桶,分成n1/2∗n1/2n^

2016-10-19 01:02:41 621 1

原创 Uva 11992 Fast Matrix Operations(线段树区间设值与加操作)

题目链接Uva 11992 Fast Matrix Operations因为同时有加和赋值操作,所以在下推标记时要注意,应先考虑赋值操作,再考虑加 而在更新的时候如果,是赋值更新,则会清除加标记,而如果是加更新则不会。 wrong了很久才A了。。。。 这里要注意初始值为0,即相当于setv[1] = 0;#include <iostream>#include<cstdio>#includ

2016-10-18 01:13:26 540

原创 线段树模板

处理区间问题的利器——线段树,每个节点表示一段区间的一些信息,因为查询和更新都是从树顶往下推的所以没有必要把所管理的区间左右端点显示的储存在节点中,使用的时候用一个数组表示,是一棵完全二叉树所以 lc=o<<1lc = o<<1 rc=o<<1|1rc = o<<1|1用位运算加快速度。点更新给定一个数列a1,...,ai,...,ana_1,...,a_i,...,a_n 有两个操作

2016-10-17 21:34:05 330

原创 RMQ查询-ST算法

对于RMQ(Range Minimum Query)问题.给出一个n个元素的数组,{a1,a2,,,ai,,,an}\{a_1,a_2,,,a_i,,,a_n\},对于查询操作Query(L,R),给出其中的min{a1,a2,...,ai,...,an}min\{a_1,a_2,...,a_i,...,a_n\}, 这里用一个简单的数据结构来解决这个问题,他的预处理只需要O(n)O(n),对于查

2016-10-14 19:49:22 489

原创 迭代法求解线性方程组

关于迭代法一般解释参见数值计算教材 求解线性方程组Ax=bAx = bJacobi 迭代法向量Xk+1=D−1[−(L+U)Xk+b]X_{k+1} = D^{-1}[-(L+U)X_k+b] 其中D=diag[a11,a12,...,ann]TD = diag[a_{11},a_{12},...,a_{nn}]^T LL 为系数矩阵的下三角矩阵,其中除掉对角线 UU为系数矩阵的上三角矩阵,

2016-10-13 14:35:42 2199

原创 二维树状数组(poj 2155 )

二维的树状数组与一维的情况并没有什么大的区别,只需把第二维看成是对第一维的树集做成的一个树状数组就行,看了代码就明白了单点更新void add(int x,int y,int val){ for(int i = y ; i<=n ; i+= i&-i) { for(int j=x ; j<=n ; j+=j&-j) { tre

2016-10-11 22:50:11 368

原创 树状数组(BIT)

关于树状数组的详细介绍,参见博客 作者:Hawstein 出处:http://hawstein.com/posts/binary-indexed-trees.html 声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。这里仅给出树状数组相关操作的代码sumint sum(int idx){

2016-10-10 22:14:53 402

原创 UVA 11029--取n的k次幂的前m位数

问题是简化为这样,nk=xn^k = x,求xx 的前m位数,当然这种问题一般会在精度范围内的。 给出一个简单的计算公式你就明白了。 nk=xn^k=x lognk10=log10xlog_{10}^{n^k} = log_{10}x x=10k∗logn10x = 10^{k*log_{10}^n},这个数很大,显然不能直接计算 a=floor(k∗logn10),b=k∗

2016-10-07 15:17:20 961

空空如也

空空如也

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

TA关注的人

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