上一页 1 2 3 4 5 6 7 8 9 10 ··· 66 下一页
摘要: Manacher算法能够在O(N)的时间复杂度内得到一个字符串以任意位置为中心的回文子串。其算法的基本原理就是利用已知回文串的左半部分来推导右半部分。转:http://blog.sina.com.cn/s/blog_70811e1a01014esn.html首先,在字符串s中,用rad[i]表示第i个字符的回文半径,即rad[i]尽可能大,且满足:s[i-rad[i],i-1]=s[i+1,i+rad[i]]很明显,求出了所有的rad,就求出了所有的长度为奇数的回文子串.至于偶数的怎么求,最后再讲.假设现在求出了rad[1..i-1],现在要求后面的rad值,并且通过前面的操作,得知了当前字符 阅读全文
posted @ 2013-07-28 20:21 沐阳 阅读(12729) 评论(0) 推荐(2) 编辑
摘要: HDU-4611Balls Rearrangement题意:具体题意不大清楚,最后要处理一个这样的表达式:sum{ |i % a - i % b| },0 #include #include #include #include #include using namespace std;priority_queueq1, q2;int main() { int T; scanf("%d", &T); int a, b, n; while (T--) { scanf("%d %d %d", &n, &a, &b); while 阅读全文
posted @ 2013-07-28 14:18 沐阳 阅读(473) 评论(0) 推荐(0) 编辑
摘要: HDU-1402A * B Problem Plus题意:给定两个整数,整数的长度最多能达到50000位,输出两个整数的乘积。分析:题意非常的明了,一个惊世骇俗的想法是使用两个数组将整数保留起来,然后模拟我们平常手算时的乘法,不过这样一来时间复杂度将是O(N^2),由于N过大,因此此题因寻求更加快速的解法。 对于任何一个N位的整数都可以看作是An*10^(n-1) + An-1*10^(n-2) + ... + A2*10^2 + A1*10 + A0。如果把10看作是一个自变量,那么任何一个整数就可以视作为一个多项式,两个整数相乘也便可以看作是两个多项式相乘。对于一个多项式,我们平时所接触. 阅读全文
posted @ 2013-07-27 15:40 沐阳 阅读(6712) 评论(0) 推荐(2) 编辑
摘要: 快速傅里叶变换(FFT)的原理及公式 非周期性连续时间信号x(t)的傅里叶变换可以表示为式中计算出来的是信号x(t)的连续频谱。但是,在实际的控制系统中能够得到的是连续信号x(t)的离散采样值x(nT)。因此需要利用离散信号x(nT)来计算信号x(t)的频谱。 有限长离散信号x(n),n=0,1,…,N-1的DFT定义为: 可以看出,DFT需要计算大约N2次乘法和N2次加法。当N较大时,这个计算量是很大的。利用WN的对称性和周期性,将N点DFT分解为两个N/2点的 DFT,这样两个N/2点DFT总的计算量只是原来的一半,即(N/2)2+(N/2)2=N2/2,这样可以继续分解下去,将N/... 阅读全文
posted @ 2013-07-27 11:07 沐阳 阅读(167354) 评论(3) 推荐(6) 编辑
摘要: HDU-4605Magic Ball Game题意:给定一颗以1为根的数,每个节点要么有两个孩子节点,要么没有孩子,每个节点有一个重量,现在从节点1往下放置一个小球,根据小球和节点的重量的不同球落下的轨迹是一个概率问题:设球的重量为X,节点的重量为w[i]:X = w[i],那么小球的运动将停止;X w[i],那么小球向左落下概率为1/8,向右落下的概率为7/8。现在有Q组询问,问小球的质量为X,落到v节点的概率为多大?分析:最直接的办法就是直接暴力求解该题,从询问的叶子节点开始向上寻找,进行概率的累加,比赛的时候这样写,超时了。赛后听说是使用的树状数组维护路径状态进行求解。具体过程是在一个. 阅读全文
posted @ 2013-07-24 21:14 沐阳 阅读(619) 评论(0) 推荐(0) 编辑
摘要: 对于这几个函数的一些实例以便于理解:#include #include #include #include #include #include using namespace std;int main() { // vector的插入:如果迭代器指向了某一元素,那么插入后将该元素挤到了后面,即插入到该元素之前 vectorv; v.push_back(2), v.push_back(3), v.push_back(4); vector::iterator it; it = v.begin(); it++; v.insert(it, 100); ... 阅读全文
posted @ 2013-07-24 10:47 沐阳 阅读(1347) 评论(0) 推荐(0) 编辑
摘要: 题意:现给定一个字符集中一共Z个元素的环境,给出一个Z*Z的数组,表示从i到j之间的距离。给定两组字符串,分别问包含着两个字符串(给定的字符串为所求字符串的子序列不是子串)对应位的距离和值最小为多少?输出这两个字符串。分析:该题的状态还是比较好开设的,设dp[i][j]表示a串的前i个字符和b串的前j个字符被包含后的最小开销,于是动态转移方程:dp[i][j] = min(dp[i][j], dp[i-1][j] + wa[sa[i]]); 其中wa数组表示某个字符与另外一个最小花费的字符匹配,sa[i]表示a串的第i个字符dp[i][j] = min(dp[i][j], dp[i][j-1] 阅读全文
posted @ 2013-07-22 20:07 沐阳 阅读(609) 评论(0) 推荐(0) 编辑
摘要: 题意:国王有N个儿子,现在每个儿子结婚都能够获得一定的喜悦值,王子编号为1-N,有N个女孩的编号同样为1-N,每个王子心中都有心仪的女孩,现在问如果安排,能够使得题中给定的式子和最大。分析:其实题目中那个开根号是个烟雾弹,只要关心喜悦值的平方即可。那么对王子和女孩之间构边,边权为喜悦值的平方,对于每一个王子虚拟出一个女孩边权为0,这样是为了所有的王子都能够有女孩可以配对,以便算法能够正确的执行。#include #include #include #include #include using namespace std;const int N = 405;const int inf = 0x 阅读全文
posted @ 2013-07-22 10:07 沐阳 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 题意:该题的题意晦涩,勉勉强强听别人说了一遍后再读了一遍题才算懂了题意,题图说的是A国因为B国药进攻自己的国家,于是想办法在联通A-B之间的路径上进行阻击。阻击的舰船停留在一个路径上,舰船上都要放置水晶,相同水晶的舰船可能会被一次性摧毁,于是现在要求给出尽可能多的方案来部署舰船,使得同一水晶的舰船能够阻断所有从B到A的路径,每条路径上只能够部署一部舰船。分析:题意抽象之后就是一个网络求出从源点到汇点的尽可能多的割边集,且每个割边集没有公共边。根据题目的要求,我们设想从A到B的最短路长度为K,那么假设方案数大于K,那么每个割边集至少要包含该最短路上的一条边,否则存在从A到B的通路,那么这个包含的 阅读全文
posted @ 2013-07-22 10:01 沐阳 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个分层图,即只能够在相邻层次之间流动,给定了各个顶点的层次。要求输出一个阻塞流。分析:该题直接Dinic求最大流TLE了,网上说采用Isap也TLE,而最大流中的最高标号预流推进(HLPP)能够直接秒掉这一题。当然还有一种挽救的方式就是首先进行一次贪心预流,然后进行dinic。也是第一次听说还有贪心预流这回事,所以找了一份代码特地学习了一番。具体步骤如下:1.首先将所有节点按照层次进行排序,对每个节点有in[i]和out[i]两个属性,前者表示能够流入到该节点的流量,后者表示能够流出该节点的流量;2.从层次最低的节点(即源点)开始,设in[S] = inf,表示源点能够进入无限的流 阅读全文
posted @ 2013-07-21 18:54 沐阳 阅读(632) 评论(1) 推荐(1) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 66 下一页