摘要: 2013WHUACM校赛网赛题目题解一个人出一套题目略累。。不过还好数据啥的没出什么差错。关于题目描述:附件中会有一份中文的题目,所以以下题解不再赘述题意。E-easy N-normal H-hard VH-very hardA – A problem on tree (N)SolutionTag:贪心,结论。我们首先来考虑一条链的情况:设第一个点的值是a,第二个是b,第三个是c。。。即a-b-c-d。。。那么有:ch[1]=ach[2]=a+bch[3]=max(2a+c,a+b+c)ch[4]=max(3a+d,2a+2b+d,2a+c+d,a+b+c+d)ch[5]=max(4a,3a+ 阅读全文
posted @ 2013-04-14 18:23 bo_jwolf 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值。但当函数是凸性函数时,二分法就无法适用,这时三分法就可以“大显身手”~~ 如图,类似二分的定义Left和Right,mid = (Left + Right) / 2,midmid = (mid + Right) / 2; 如果mid靠近极值点,则Right = midmid;否则(即midmid靠近极值点),则Left = mid;程序模版如下:double Calc(Type a) { /* 根据题目的意思计算 */ } void Solve(void) { double Left, Right; d... 阅读全文
posted @ 2013-04-14 16:13 bo_jwolf 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 比赛链接:http://www.acmore.net/contest.php?cid=1008 首先声明,我参加这场比赛纯属凑热闹,不过既然做了,就写一个解题报告,希望能帮助到需要帮助的同学。 这场比赛,总体来说难题适中(仅对我个人而言),对于初学者来说有点偏难,也有可能是我实力太弱了,呵呵,不过我说的是我自己真实感受。 下面奉上每一题的解题思路,希望能够给同学一点帮助。如果需要代码,可以私信我,这里就不贴代码了。如果读者有更好的解题方法,希望您不吝赐教,能够留言说说思路,在这里先谢过了。Problem A 客户数量这道题给出了将一个长度为n的糕点,切成单位长度。已知每次切割需要花费x*... 阅读全文
posted @ 2013-04-14 11:30 bo_jwolf 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数直接计算公式 欧拉函数的定义: E(N)= ( 区间[1,N-1] 中与 N 互质的整数个数). 对于 积性函数 F(X*Y),当且仅当 GCD(X,Y)= 1 时, F(X*Y) = F(X)* F(Y) 任意整数可因式分解为如下形式: 其中( p1, p2 ... pk 为质数, ei 为次数 ) 所以 因为 欧拉函数 E(X)为积性函数, 所以 对于 , 我们知道 因为pi 为质数,所以 [ 1, pi-1 ] 区间的数都与 pi 互质 对于 区间[ 1,] ,共有个数, 因为只有一个质因子, 所以与约数大于1 的必定包含 质因子 , ... 阅读全文
posted @ 2013-04-14 00:57 bo_jwolf 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 例题是 POJ 1061 青蛙的约会 题目大意是,一个周长为L的圆, A、B两只青蛙,分别位于 x 、y 处,每次分别能跳跃 m 、n ,问最少多少次能够相遇,如若不能输出 “ Impossible” 此题其实就是扩展欧几里德算法-求解不定方程,线性同余方程。 设过 k1 步后两青蛙相遇,则必满足以下等式: ( x + m*k1 ) - ( y + n*k1 ) = k2*L ( k2 =0 , 1 , 2....) //这里的k2: 存在一个整数k2, 使其满足上式 稍微变一下形得: ( m - n )*k1 - k2*L= y - x 令 a = m - ... 阅读全文
posted @ 2013-04-14 00:40 bo_jwolf 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 刘雅琼PPT讲解链接:http://wenku.baidu.com/view/8e9ebefb0242a8956bece4b3.html扩展KMP: 给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0<=i<lenA), 求出A[i..lenA-1]与B的最长公共前缀长度,记为ex[i](或者说,ex[i]为满足A[i..i+z-1]==B[0..z-1]的最大的z值)。 扩展KMP可以用来解决很多字符串问题,如求一个字符串的最长回文子串和最长重复子串。【算法】 设next[i]为满足B[i..i+z-1]==B[0..z... 阅读全文
posted @ 2013-04-14 00:35 bo_jwolf 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 问题:模线性同余方程组: x = a1 ( mod n1 ) x = a2 ( mod n2 ) .... x = ak ( mod nk )给定 A ( a1, a2 , ... , ak ) , N ( n1, n2, ..., nk ) 求 X 。通常分为两种 一, ( Ni, Nj ) 之间两两互质 二, ( Ni, Nj ) 之间不都互质一 ( Ni, Nj ) 之间两两互质 定理( 见算法导论 P874 ): 如果 n1, n2 , ... , nk 两两互质, n = n1*n2*..*nk ,则对任意整数 a1,a2,a3..,ak , 方程组 x =... 阅读全文
posted @ 2013-04-14 00:33 bo_jwolf 阅读(266) 评论(0) 推荐(0) 编辑
摘要: int gcd( int a, int b ){ if( a == 0 ) return b; if( b == 0 ) return a; if( a%2 == 0 && b%2 == 0 ) return 2*gcd( a/2, b/2 ); else if( a%2 == 0 ) return gcd( a/2, b ); else if( b%2 == 0 ) return gcd( a, b/2 ); else return gcd( abs(a-b), min(a... 阅读全文
posted @ 2013-04-14 00:28 bo_jwolf 阅读(107) 评论(0) 推荐(0) 编辑
摘要: Problem A 客户数量 可以得出将长度为 len的蛋糕切成 len段 1的,不管如何切,总花费都为 len*(len-1)/2 对于每个顾客,来到的时间st,以及需要的蛋糕长度k,则有一个终止时间ed = st+k*(k-1)/2 对每个顾客求出其服务终止时间,然后得到n个区间,将区间以终点排序,然后线性扫过去,用i的起点时间与前一个服务顾客 的终点时间比较即可。 时间复杂度 O( NlogN )#include<cstdio> #include<cstring> #include<algorithm> #include<cassert> 阅读全文
posted @ 2013-04-14 00:20 bo_jwolf 阅读(146) 评论(0) 推荐(0) 编辑
摘要: A.连续子串和贪心题,枚举每一个数字作为结束点。保留前i位的前缀和sum[i],对于第i为结束的合法序列,其值为sum[i]-sum[i-K],sum[i]-sum[i-K-1],...,sum[i]-sum[0],那么我们只需要对每一个 i 保留sum[0]到sum[i-K]的最小值即可。代码如下:Problem A #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int INF = 0 阅读全文
posted @ 2013-04-13 00:05 bo_jwolf 阅读(136) 评论(0) 推荐(0) 编辑