Problem Description 最后来个字符串签个到吧,这题其实并不难,所需的算法比较基础,甚至你们最近还上过课. 为了降低难度,免得所有人爆零.这里给几个提示的关键字 :字符串,回文,二分,哈希. 注意要对奇偶回文分开二分 这样还不会做,说明基础有所欠缺. 给你一个字符串A和一个字符串B,请你求一个满足以下要求的所有字符串中,最长的字符串C的长度: C必须同时是A和B的子串,即A和B中都必须存在一个子区间和C长得一样 C必须是一个回文,即正过来读和反过来读都一样 Input 多组数据,…
这还是一道数论题 TimeLimit:4000MS  MemoryLimit:128MB 64-bit integer IO format:%lld Special Judge   Problem Description 最后来个字符串签个到吧,这题其实并不难,所需的算法比较基础,甚至你们最近还上过课. 为了降低难度,免得所有人爆零.这里给几个提示的关键字 :字符串,回文,二分,哈希. 注意要对奇偶回文分开二分 这样还不会做,说明基础有所欠缺. 给你一个字符串A和一个字符串B,请你求一个满足以下…
Dr. Ellie Arroway has established contact with an extraterrestrial civilization. However, all efforts to decode their messages have failed so far because, as luck would have it, they have stumbled upon a race of stuttering aliens! Her team has found…
后缀数组的题博客里没放进去过..所以挖了一题写写 充实下博客 顺便留作板子.. 一个字符串S中 内容不同的子串 有 sigma{n-sa[i]+1-h[i]}   (噢 这里的h[]就是大家熟知的height[]) 所以l=1,r=上述sigma 二分 答案是字典序第几大的子串. 然后 求S中第k大的子串W : 因为h[i]是与i-1有关的 所以要从n downto 1,k-=n-sa[i]+1-h[i] 至 k再减就非正了 显然这样扫过来 子串字典序是递减的  因此可以得到第k大子串W 然后再…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 题意:给一个字符串,询问某字串的不同字串的个数. 可以用后缀数组来解决,复杂度O(n).先求出倍增算法求出sa数组,然后DP求出Height数组,对于每个询问,重构sa数组,这里重构可以利用整个串的sa数组来得到,但是这里截取的字串,可能顺序会变化,看一个例子:cacbe 排序为:acbe,be,cacbe,cbe,e   得到字串[0,2]的排序是:acbe(1),cacbe(0),cbe(…
题意 一个长为 \(n\) 的字符串 \(s\),和 \(m\) 个询问.每次询问有 \(4\) 个参数分别为 \(a,b,c,d\). 要你告诉它 \(s[a...b]\) 中的所有子串 和 \(s[c...d]\) 的 最长公共前缀 \((\mathrm{LCP})\) 的最大值. \((1\le n,m\le 10^5, a\le b,c\le d,1\le a,b,c,d\le n)\) 题解 一开始看错了题 以为是 \([a,b]\) 中所有子串 和 \([c,d]\) 中所有子串的…
Problem Description 好久没出数据结构题,现在赶紧来做道数据结构题热热身 小q现在要去银行,他有个很厉害的bug能看到前面排队的人.假如当前有人正在办理业务,那么肯定要等待前一个人完成.现在有m个事件,分为3种.第一种是第x时刻有客人到银行办理业务,用时t.第二种是第i个事件中的客人取消去银行.第三种是小q想询问他第x分钟去银行需要等多久.小q是个礼貌的人如果有人跟他同一时刻到达,他会让别人先. Input 单组数就 第一行输入一个整数m,代表m个事件. 接下来m行输入3种操作…
/** problem: http://www.fjutacm.com/Problem.jsp?pid=3700 按二进制将k个待查点分类分别跑dijkstra **/ #include<stdio.h> #include<vector> #include<queue> using namespace std; ; ; const int INF = 0x3f3f3f3f; int ans; template <typename T> class Graph…
题意:对一个空串每次在后面加一个字符,问每加完一次得到的字符串有几个不同的子串. 思路:每个子串都是某个后缀的前缀,对于每个后缀求出他能贡献出之前没有出现过的前缀的个数,答案累加就行. 要求每个后缀的贡献,就是这个后缀的长度减去此前的后缀与该后缀的LCP的最大值,这个最大值是height[i]. 至于怎么找出先前的能与该后缀生成最大LCP的后缀,可以用set维护,将cmp函数自定义成按字典序从小到大, 那么目标后缀就是当前后缀的前趋或后继,求两次LCP并更新答案即可.字符串hash用来比较,二分…
[题目链接] http://www.spoj.pl/problems/PHRASES/ [题目大意] 求在每个字符串中出现至少两次的最长的子串 [题解] 注意到这么几个关键点:最长,至少两次,每个字符串. 首先对于最长这个条件,我们可以想到二分答案, 然后利用后缀数组所求得的三个数组判断是否满足条件. 其次是出现两次,每次出现这个条件的时候, 我们就应该要想到这是最大值最小值可以处理的, 将出现在同一个字符串中的每个相同字符串的起始位置保存下来, 如果最小值和最大值的差距超过二分长度L,则表明在…