摘要:
[题目来源]:tyvj1565[关键字]:递推 矩阵乘法[题目大意]:守望者一次可以移动1到k步,问她走到第n个格有多少种走法(mod 7777777)。//=====================================================================================================[分析]:首先由推出方程,和费波纳契数列很像:f[i]=f[i-1]+f[i-2]+.......+f[i-k]。但是问题是数据范围很大,单纯循环肯定超时,这时要用矩阵加速。[代码]:View Code 1 var 2 n, k: l...
阅读全文
posted @ 2011-11-04 23:15
procedure2012
阅读(227)
推荐(0)
摘要:
[题目来源]:2011/11/04模拟赛[关键字]:递推[题目大意]:在一个类似菱形的地图里放置诸侯,保证每一行每一列都只有一个诸侯。//=====================================================================================================[分析]:先把地图转化成,再用递推。可以很容易的求出方程:f[i,j]=∑f[k,j-1]*(l[i]-(j-1))其中f[i,j]为前i列放j个,l[i]是第i列有多少个。[代码]:View Code 1 {$i-,s-,q-,r-} 2 var 3 ...
阅读全文
posted @ 2011-11-04 23:05
procedure2012
阅读(162)
推荐(0)
摘要:
[题目来源]:Beijing 2008[关键字]:树状数组[题目大意]:是要组成许多比赛,比赛的要求是,两个人比赛一个人作裁判,裁判的能力值必须要在两个人之间,位置也是,问一共有多少种不同的比赛方式。每个人的能力值各不相同。//=====================================================================================================[分析]:枚举一个中间点,查找它左边有几个比它能力值小的右边有几个比它能力值大的,根据乘法原理将其相乘;再查找它左边有几个比它能力值大的右边有几个比它能力值小的,根据乘法
阅读全文
posted @ 2011-11-02 16:34
procedure2012
阅读(500)
推荐(0)
摘要:
[题目来源]:Japan 2007[关键字]:图论 最小生成树[题目大意]:求一棵生成树让最大边最小边差值最小//=====================================================================================================[分析]:首先将边进行排序,然后依次枚举么一个边作为生成树中的最小边利用克鲁斯卡尔算法求最小生成树,如果此时求出的结果由于之前的值就更新。因为克鲁斯卡尔算法就是每次取可以取的最小边加入生成树中,所以利用它求出来的最小生成树一定是以枚举的边作为最小边的所有可能值中最优的。[代码]:Vi
阅读全文
posted @ 2011-11-02 16:18
procedure2012
阅读(239)
推荐(0)
摘要:
[题目来源]:POJ Monthly--2007.11.25, Yang Yi[关键字]:线段树[题目大意]:对于给定区间进行整体添加数值,或询问操作,对于每个询问操作输出该区间数字之和。//=====================================================================================================[分析]:对于线段树的操作,没有技巧只是要注意延迟操作和int64。原先写的时候思路并不清楚也没有真正弄明白,下面给出一个比较优美的版本。[代码]:View Code 1 type 2 rec =...
阅读全文
posted @ 2011-11-02 16:11
procedure2012
阅读(262)
推荐(0)
摘要:
[题目来源]:Ulm Local 2007[关键字]:RMQ[题目大意]:给定一个非递减的整数序列(n),然后给出m个查询区间,针对每一个查询,输出此区间内重复最多的数字重复的次数。//=====================================================================================================[分析]:如果给定的区间恰好是连续的区间的两端则可直接同过RMQ问题求解。但如果不是这样则需要先求出两遍的最大值,再求中间就转换成了之前所说的问题。[代码]:View Code 1 var 2 n, q: ...
阅读全文
posted @ 2011-11-02 16:06
procedure2012
阅读(261)
推荐(0)
摘要:
[题目来源]:POJ Monthly--2007.08.05, Huang, Jinsong[关键字]:树状数组[题目大意]:一棵苹果树每个数字上长有1个苹果,有两种操作:1、改变一个树枝上的苹果数;2、询问以某个树枝为根的子树的苹果数量。//====================================================================================================[分析]:此题关键不在数据结构(区间和可以用树状数组或线段树),主要是如何把树(不一定是二叉树)转化为数组来处理。首先建树(我采用的是邻接表),然后DFS先
阅读全文
posted @ 2011-11-02 15:57
procedure2012
阅读(166)
推荐(0)
摘要:
[题目来源]:South Central USA 2006[关键字]:字符串[题目大意]:找出给所有字符串的最长公共字串。//=====================================================================================================[分析]:暴力枚举+KMP。最近刚学了后缀数组,发现用它也可以解出这道题,所以就试了试,但说实话很失败……输出错了还以为算法错了白调了半天,后缀数组做这道题代码很长(也许是我写坏了),基本思路就是连在一起然后二分答案对后缀数组分组。[代码]:KMP 1 var 2 ...
阅读全文
posted @ 2011-11-02 14:27
procedure2012
阅读(152)
推荐(0)
摘要:
[题目来源]:Northeastern Europe 2002, Far-Eastern Subregion[关键字]:搜索[题目大意]:给出每两台电脑之间的流量,将所有电脑分为两组只有不同组之间才有流量求出怎样分能达到最大流量。//=====================================================================================================[分析]:对于每一台电脑都有两种选择:归入第一组还是第二组。所以只要枚举每一种可能的状态,找出最优值。[代码]:View Code 1 program Proje.
阅读全文
posted @ 2011-11-02 14:18
procedure2012
阅读(197)
推荐(0)
摘要:
[题目来源]:Southeastern Europe 2004[关键字]:字符串[题目大意]:给定一个字符串,求到哪一位时的字串是前几位循环组成的,并求出循环次数。//=====================================================================================================[分析]:利用KMP来求解。在KMP中有一个p数组记录当前字符的它的上一个位置,且保证这一段一定是来连续的。所以如果i处有循环则i到p[i]的长度即为循环节长度,所以如果i mod (i-p[i])=0则说明有循环,i div (
阅读全文
posted @ 2011-11-02 12:33
procedure2012
阅读(249)
推荐(0)