上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 25 下一页

bzoj 1951 lucas crt 费马小定理

摘要: 首先假设输入的是n,m我们就是要求m^(Σ(c(n,i) i|n)) mod p那么根据费马小定理,上式等于m^(Σ(c(n,i) i|n) mod (p-1)) mod p那么问题的关键就是求Σ(c(n,i) i|n) mod (p-1)了那么如果P是素数的话,我们可以用lucas定理来快速求出来组合数,这道题的p-1是非素数,那么我们分解质因数pi,假设c(n,i) i|n为X,那我们求出来X mod pi=ai,这个是符合lucas定理的,那么我们可以得到质因子数个式子(本题有4个质因子),然后我们用中国剩余定理合并这4个式子就行了/*************************** 阅读全文
posted @ 2013-12-21 21:28 BLADEVIL 阅读(470) 评论(0) 推荐(0) 编辑

bzoj 1061 志愿者招募 费用流

摘要: 详见BYV的博客,写的非常全面https://www.byvoid.com/blog/noi-2008-employee/**************************************************************Problem: 1061User: BLADEVILLanguage: PascalResult: AcceptedTime:1496 msMemory:1028 kb****************************************************************///By BLADEVILvarn, m :longi 阅读全文
posted @ 2013-12-21 13:01 BLADEVIL 阅读(328) 评论(0) 推荐(0) 编辑

bzoj 2115 路径xor和最大值

摘要: 首先我们可以将这张图转化为一棵树,其中可能有好多环,肯定是从1走到N,其中可能经过好多环,因为我们不走N在的一支,最后还是会走回来,因为a xor b xor b=a,所以相当于没走,就是走了个环,那么我们这个题可以转化成有若干个环的值,还有1-n的值,在环中全任意个,xor起来再xor 1-n的,使最后最大。求环的时候我们可以记下每个点的一个值,代表从1到这个点的路径值xor,用size表示(我英语不好。。。)那么我们做一遍dfs,如果X访问到已经走过的点P了,那么就出现了环,环中的值就是SIZE[p] xor size[x] xor len[q]这样我们就得到了环的值。这里的环不一定是所有 阅读全文
posted @ 2013-12-20 20:50 BLADEVIL 阅读(1640) 评论(0) 推荐(0) 编辑

bzoj 2662&bzoj 2763 SPFA变形

摘要: 我们用dis[i,j]代表到i这个点,用j张票的最短路程,那么我们只需要在SPFA更新的时候,用dis[i,j]更新dis[p,j]和dis[p,j+1]就行了/**************************************************************Problem: 2662User: BLADEVILLanguage: PascalResult: AcceptedTime:4 msMemory:376 kb****************************************************************///By BLADEV 阅读全文
posted @ 2013-12-20 15:13 BLADEVIL 阅读(427) 评论(0) 推荐(0) 编辑

bzoj 1009 DP+矩阵加速

摘要: 我们用DP来解决这个问题W[I,J]表示准考证的第I位,和不吉利的数匹配到了第J位的方案数,这个状态的表示也可以看成当前到第I位了,准考证的后J位是不吉利的数的前J位,的方案数那么我们最后的ans=ΣW[N,I] 0s[j+1]) and (j0) do j:=pre[j];if s[i]=s[j+1] thenbegininc(j);pre[i]:=j;end;end;for i:=0 to m-1 dofor j:=0 to 9 dobeginstr(j,c);k:=i;while (s[k+1]c) and (k0) do k:=pre[k];if s[k+1]=c then inc(k 阅读全文
posted @ 2013-12-20 13:04 BLADEVIL 阅读(1481) 评论(1) 推荐(1) 编辑

树链剖分之轻重链讲解

摘要: 首先我们有一颗树每个点(或者边)有权值,我们要做的就是询问两个点之间路径上各点(边)权值的最大、最小,权值和(就是线段树能干的),然后我们还要支持在线更改任意节点(边)的权值。 我们要做的是轻重链剖分,首先我们看几个定义 size:和SBT里的一样,size[i]为以该点为根节点的子树一共有几个节点。 重儿子:一个节点当不为叶子节点的时候有且只有一个重儿子,重儿子为该点的儿子中size最大的,有多个最大时任选一个。 重链:由根节点开始,每个点每次都访问自己的重儿子,一直访问到叶子节点,就组成了一条重链 那么对于一个点的非重儿子来说,以他为根节点,可以重新访问出一条重链 如图所示... 阅读全文
posted @ 2013-12-18 09:40 BLADEVIL 阅读(3974) 评论(0) 推荐(4) 编辑

KM算法讲解

摘要: 对于二分图,我们可以用匈牙利来求出来最大匹配,但是如果给定每条边一个权值,我们要求这张图的最大匹配最大(小)权,单纯的用匈牙利就没法解决了,当然用费用流也可以做,但是代码较长,在处理完全二分图的时候时间也较长。 我们这时引入一个新的算法,就是KM。 对于KM算法,我们引入顶标概念,规定每个点都有顶标,且左面的点(二分图的左右)的顶标设成X[I],右面的设成Y[I],w[i,j]代表i-->j这条边的权值(我们这里求最大权值和),那么满足对于任意边,x[i]+y[j]>=w[i,j],那么,我们最后肯定可以找到一种匹配方式(完备匹配),使得这种方式中的每一条边都满足x[i]+y[j] 阅读全文
posted @ 2013-12-17 18:56 BLADEVIL 阅读(1494) 评论(1) 推荐(0) 编辑

bzoj 2435 BFS

摘要: 我们可以先将无根树变成有根树,随便选一个点当根就行了,我们选1,bfs求出来每个点的size值,代表以它为根节点的子树中有多少个节点,(dfs可能会爆栈),然后再对于每一条边算就好了我tle了,也不知道咋会事儿,可能是pascal的int64的运算有些耗时。。。。/************************************************************** Problem: 2435 User: BLADEVIL Language: Pascal Result: Time_Limit_Exceed*********************... 阅读全文
posted @ 2013-12-17 18:24 BLADEVIL 阅读(464) 评论(0) 推荐(0) 编辑

bzoj 1293 贪心

摘要: 首先我们可以将这道题看成一个数轴,数轴其中的某些点存在一些颜色,我们要选取最短的一段,使这段存在所有颜色,那么我们使用指针i,j表示在j-i位置中包含的颜色,那么初值是0,0,我们先i++,同时添加i位置的颜色,直到j-i中存在所有颜色,然后j++,同时删除颜色,直到不存在所有颜色,然后更新答案,重复这过程,因为i,j只增不减,所以是o(n)的,但是要离散化,还是nlogn的,也算是贪心吧/************************************************************** Problem: 1293 User: BLADEVIL La... 阅读全文
posted @ 2013-12-16 10:17 BLADEVIL 阅读(348) 评论(0) 推荐(0) 编辑

bzoj 1025 DP

摘要: 这道题根据群论的基础知识,我们可以转化成将n拆分成若干数,求这些数的lcm的方案数先筛下素数表prime那么我们可以用DP来解决这个问题,用W[I,J]代表I这个数,拆成若干个数,其中质因数最大的不超过prime[j]的方案数那么我们可以得到转移W[I,J]:=W[I,J-1]+ΣW[I-prime[j]^k,j-1] (I>=prime[j])/**************************************************************Problem: 1025User: BLADEVILLanguage: PascalResult: AcceptedT 阅读全文
posted @ 2013-12-15 08:49 BLADEVIL 阅读(371) 评论(0) 推荐(0) 编辑
上一页 1 ··· 14 15 16 17 18 19 20 21 22 ··· 25 下一页