摘要:
[关键字]:后缀数组 字符串[题目大意]:求出给定字符串的最长回文串。//========================================================================[分析]:首先把字符串反转(T')接到原串(T)后边中间用‘~’分割(大于所有字符串中元素就行),最后用'$'结束(小于所有字符)。然后枚举T串中的每一个位置i找到T'中对应的位置i'假设以i为中心有一个长度为2r的回文串,那么T[i-r,i-1]=T[i+1,i+r]=T[i'+1,i'+r](画一下就明白了)。所以找以i 阅读全文
posted @ 2012-03-28 11:43
procedure2012
阅读(327)
评论(0)
推荐(0)
摘要:
[关键字]:后缀数组 字符串[题目大意]:给定一个字符串,求不相同的子串的个数。//=======================================================================[分析]:如果所有的后缀按照suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), ……,suffix(sa[n])的顺序计算,不难发现,对于每一次新加进来的后缀suffix(sa[k]),它将产生n-sa[k]+1 个新的前缀。但是其中有height[k]个是和前面的字符串的前缀是相同的。所以suffix(sa[k])将“贡献”出n-sa 阅读全文
posted @ 2012-03-28 11:29
procedure2012
阅读(384)
评论(0)
推荐(0)
摘要:
[关键字]:后缀数组 字符串[题目大意]:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠。//==========================================================================================[分析]:先二分答案判断有没有至少出现k 次的长度为x的重复子串。因为可以重复所以只要heighe数组中有>x说明有长度为x的可重复子串,然后再根据height分组:如果height[i]<x就把i和上一组分开,这样每一组里都存在长为x的重复字串,如果有任意一组里有超过k个,说明成立。[代码 阅读全文
posted @ 2012-03-28 11:18
procedure2012
阅读(756)
评论(0)
推荐(0)
摘要:
[关键字]:随机化搜索 模拟退火[题目大意]:给出n个点,找出一个距离所有点之和最小的点,输出距离。//===============================================================================[分析]:同样是随机化的方法,只是在把没个点随机移动时有小小的变动。poj1379是使用得随机一个角度x然后利用t*cos(x)和t*sin(x)来处理随机走到的位置,而这道题因为没有了边界的限制,可以用以2t为长以要移动的点位中心的正方形中随机一个移动的位置来求最优值。至于具体退火算法步骤可以看poj1379或http://www.c 阅读全文
posted @ 2012-03-28 10:42
procedure2012
阅读(963)
评论(0)
推荐(0)
摘要:
[关键字]:随机化搜索 模拟退火[题目大意]:在一个给定的矩形中有一些点,找到一个点距所有点的最小距离最短。//==============================================================================[分析]:用模拟退火的方法,其实不是标准的模拟退火因为出于时间等因素考虑,并没有加入以一定概率接受稍差解,而只有退火过程。大体步骤:1、随机出NUM个点2、枚举步长,并在此步长下让每一个随机的点随即移动一定次数并记录最优值。3、退火,步长减少。[代码]:View Code #include<iostream>#incl 阅读全文
posted @ 2012-03-28 10:20
procedure2012
阅读(499)
评论(0)
推荐(0)