[Vijos 包裹快递]
摘要:[题目来源]:vijosOrz教主第一次模拟赛[关键字]:图论 二分[题目大意]:给出每个点最早到达时间和最晚到达时间及该路段路程,求出最大速度最小//=====================================================================================================[分析]:二分答案+验证。但是由于浮点类型,所以要注意:1、精度问题;2、二分的停止条件。精度问题可以用extended解决,停止条件可以设定为l与r的差值,在要求精度以下。[代码]:View Code 1 var 2 n: longint...
阅读全文
posted @
2011-11-10 23:53
procedure2012
阅读(213)
推荐(0) 编辑
[VIjos 字符串还原]
摘要:[题目来源]:vijsoOrz教主第一次模拟赛[关键字]:模拟[题目大意]:每个字符串有三种变换方法:1、倒序;2、所有字母后移k个(k未知);3、所有字母前以k个(k未知),给出三个同一字符串变换后的,求出原字符串。//=====================================================================================================[分析]:因为三个变换法则中只有第一个可以确定原串,所以枚举每一个作为倒序后的字符串,还原后与另外两个匹配看是否符合2、3。[代码]:View Code 1 program .
阅读全文
posted @
2011-11-10 23:46
procedure2012
阅读(282)
推荐(0) 编辑
[Vijos 比赛]
摘要:[题目来源]:Vijos@潘帕斯雄鹰生日模拟赛T3[关键字]:数学[题目大意]:n个队伍进行循环赛,给出第m号队在每一局里对阵的对手,求出第T轮对阵表。//===================================================================================================[分析]:IN3 1 2213 队伍 1 2 3第一场 2 1 3第二场 1 3 2第三场 3 2 1IN5 2 413254 队伍 1 2 3 4 5第一场 2 1 3 5 4第二场 5 3 2 4 1第三场 4 2 5 1 3第四场 1 5
阅读全文
posted @
2011-11-10 23:37
procedure2012
阅读(160)
推荐(0) 编辑
[Vijos 拼图]
摘要:[题目来源]:vijos@潘帕斯雄鹰生日模拟赛T2[关键字]:搜索[题目大意]:给出n个不规则图形,要求用所有的图形拼成一个正方形是否可行,可行则输出方案。//=====================================================================================================[分析]:虽然一眼就能看出搜索但是要想实现却并不是太简单。就是枚举每一个图形可以放在哪,然后放置在搜索下一个。判断时要利用给出的矩形判断。[代码]:View Code 1 type 2 rec = record 3 x...
阅读全文
posted @
2011-11-10 23:28
procedure2012
阅读(216)
推荐(0) 编辑
[Vijos 飞翔]
摘要:[题目来源]:vijso@潘帕斯雄鹰生日模拟赛T1[关键字]:动态规划[题目大意]:一个n*m的矩形,从(1,1)飞到(n,m),中间有些格子可以沿对角线穿过,问最短。//=====================================================================================================[分析]:首先可以明确地,要是有可以抄近路的格子则一定走它会更优,所以只要找到沿途可以经过的最多的这样的格子,再用总共要路过的格子减然后计算。而找最多的这样的格子就是找一个x和y都上升的最长格子序列,就是最长上升序列。[代码]
阅读全文
posted @
2011-11-10 23:22
procedure2012
阅读(202)
推荐(0) 编辑
[Tyvj1450 GF打Dota]
摘要:[题目来源]:tyvj二月月赛[关键字]:次短路径[题目大意]:如果p=1则找出仅小于最短路径长度的路径长度,否则找出虽短路径。//============================================================================================================[分析]:因为是无向图所以就从1到n找一遍最短路记录1到每个点距离为d1[],从n到1找一遍最短路记录n到每个点距离为d2[]。则此时仅次于最短路径长度的路径长度为:max(d1[x]+d2[t].t+e[t].d )且d1[x]+d2[e[t].y]
阅读全文
posted @
2011-11-09 17:47
procedure2012
阅读(216)
推荐(0) 编辑
[Tyvj1228 有道搜索框]
摘要:[题目来源]:tyvj1128[关键字]:字典树[题目大意]:给出一个字典。接着输入字符串s查询最多前8个依次为前缀的字典中的单词,如没有只输出s。//============================================================================================================[分析]:用字典树,首先将每个单词插入字典树,然后寻找到s插入字典树后在字典树中的节点,以此为起点进行dfs,如果s无法插入树中说明没有依次为前缀得单词。[代码]:View Code 1 program Project1; 2 t.
阅读全文
posted @
2011-11-09 17:35
procedure2012
阅读(254)
推荐(0) 编辑
[Tyvj1114 搭建双塔]
摘要:[题目来源]:VIjos[关键字]:动态规划[题目大意]:用n块水晶搭建两个塔,要求双塔必须一样高,问最大能达到的高度为多少。//============================================================================================================[分析]:用f[i,j]表示使用前i个水晶,建起高度差为j的双塔时,较矮的那个塔的最大高度是多少。这样的话,对于每一块水晶都有三种决策,不使用,放到高塔上,放到矮塔上.而放到矮塔上会有两种情况,一是使矮塔的高度超过了高塔,二是没有超过。具体如下:if f
阅读全文
posted @
2011-11-09 17:26
procedure2012
阅读(353)
推荐(0) 编辑
[Vijos1082 丛林探险]
摘要:[题目来源]:vijos1082[关键字]:最短路[题目大意]:n个点m条边k的体力,每条边有一个长度和一个费体力值,能否从st走到ed,若能走到则最短走多少。//=====================================================================================================[分析]:就是用spfa求一遍最短路,只是在松弛时要加上一条:如果走此边不会耗费超过k的体力。至于图的存储结构,可以用邻接表或前向星。[代码]:View Code 1 type 2 rec = record 3 x...
阅读全文
posted @
2011-11-05 21:12
procedure2012
阅读(267)
推荐(0) 编辑
[Tyvj1565 守望者的烦恼]
摘要:[题目来源]: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
阅读(222)
推荐(0) 编辑
[NDK 安置诸侯]
摘要:[题目来源]: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
阅读(160)
推荐(0) 编辑
[POJ3928 Ping pong]
摘要:[题目来源]:Beijing 2008[关键字]:树状数组[题目大意]:是要组成许多比赛,比赛的要求是,两个人比赛一个人作裁判,裁判的能力值必须要在两个人之间,位置也是,问一共有多少种不同的比赛方式。每个人的能力值各不相同。//=====================================================================================================[分析]:枚举一个中间点,查找它左边有几个比它能力值小的右边有几个比它能力值大的,根据乘法原理将其相乘;再查找它左边有几个比它能力值大的右边有几个比它能力值小的,根据乘法
阅读全文
posted @
2011-11-02 16:34
procedure2012
阅读(496)
推荐(0) 编辑
[POJ3522 Slim Span]
摘要:[题目来源]:Japan 2007[关键字]:图论 最小生成树[题目大意]:求一棵生成树让最大边最小边差值最小//=====================================================================================================[分析]:首先将边进行排序,然后依次枚举么一个边作为生成树中的最小边利用克鲁斯卡尔算法求最小生成树,如果此时求出的结果由于之前的值就更新。因为克鲁斯卡尔算法就是每次取可以取的最小边加入生成树中,所以利用它求出来的最小生成树一定是以枚举的边作为最小边的所有可能值中最优的。[代码]:Vi
阅读全文
posted @
2011-11-02 16:18
procedure2012
阅读(232)
推荐(0) 编辑
[POJ3468 A Simple Problem with Integers]
摘要:[题目来源]:POJ Monthly--2007.11.25, Yang Yi[关键字]:线段树[题目大意]:对于给定区间进行整体添加数值,或询问操作,对于每个询问操作输出该区间数字之和。//=====================================================================================================[分析]:对于线段树的操作,没有技巧只是要注意延迟操作和int64。原先写的时候思路并不清楚也没有真正弄明白,下面给出一个比较优美的版本。[代码]:View Code 1 type 2 rec =...
阅读全文
posted @
2011-11-02 16:11
procedure2012
阅读(258)
推荐(0) 编辑
[POJ3368 Frequent values]
摘要:[题目来源]:Ulm Local 2007[关键字]:RMQ[题目大意]:给定一个非递减的整数序列(n),然后给出m个查询区间,针对每一个查询,输出此区间内重复最多的数字重复的次数。//=====================================================================================================[分析]:如果给定的区间恰好是连续的区间的两端则可直接同过RMQ问题求解。但如果不是这样则需要先求出两遍的最大值,再求中间就转换成了之前所说的问题。[代码]:View Code 1 var 2 n, q: ...
阅读全文
posted @
2011-11-02 16:06
procedure2012
阅读(248)
推荐(0) 编辑
[POJ3321 Apple Tree]
摘要:[题目来源]:POJ Monthly--2007.08.05, Huang, Jinsong[关键字]:树状数组[题目大意]:一棵苹果树每个数字上长有1个苹果,有两种操作:1、改变一个树枝上的苹果数;2、询问以某个树枝为根的子树的苹果数量。//====================================================================================================[分析]:此题关键不在数据结构(区间和可以用树状数组或线段树),主要是如何把树(不一定是二叉树)转化为数组来处理。首先建树(我采用的是邻接表),然后DFS先
阅读全文
posted @
2011-11-02 15:57
procedure2012
阅读(160)
推荐(0) 编辑
[POJ3080 Blue Jeans]
摘要:[题目来源]:South Central USA 2006[关键字]:字符串[题目大意]:找出给所有字符串的最长公共字串。//=====================================================================================================[分析]:暴力枚举+KMP。最近刚学了后缀数组,发现用它也可以解出这道题,所以就试了试,但说实话很失败……输出错了还以为算法错了白调了半天,后缀数组做这道题代码很长(也许是我写坏了),基本思路就是连在一起然后二分答案对后缀数组分组。[代码]:KMP 1 var 2 ...
阅读全文
posted @
2011-11-02 14:27
procedure2012
阅读(148)
推荐(0) 编辑
[POJ2531 Network Saboteur]
摘要:[题目来源]:Northeastern Europe 2002, Far-Eastern Subregion[关键字]:搜索[题目大意]:给出每两台电脑之间的流量,将所有电脑分为两组只有不同组之间才有流量求出怎样分能达到最大流量。//=====================================================================================================[分析]:对于每一台电脑都有两种选择:归入第一组还是第二组。所以只要枚举每一种可能的状态,找出最优值。[代码]:View Code 1 program Proje.
阅读全文
posted @
2011-11-02 14:18
procedure2012
阅读(191)
推荐(0) 编辑
[POJ1961 Period]
摘要:[题目来源]: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
阅读(246)
推荐(0) 编辑
[POJ1936 All in All]
摘要:[题目来源]:Ulm Local 2002[关键字]:字符串[题目大意]:给出两个字符串s1 s2判断s1是否在s2中出现过,可以不连续。//=====================================================================================================[分析]:有两种方法:1、LCS这个就不细讲了,只要最后等于s1的长度就‘YES’;2、直接模拟,一个一个字母的找,找到了就从此位往后找下一个字母,直道找完或找不到为止。[代码]:View Code 1 { 2 PROB:POJ1936 3 DATE:2.
阅读全文
posted @
2011-11-02 12:18
procedure2012
阅读(184)
推荐(0) 编辑
[POJ1860 Currency Exchange]
摘要:[题目来源]:Northeastern Europe 2001, Northern Subregion[关键字]:图论[题目大意]:套汇问题,汇率为rab,增加一个手续费cab,那么每次套汇的结果是(本金-手续费cab)*汇率rab,现在给出一个人所拥有的货币类型以及拥有该类型货币的总量,需要判断的是经过一系列货币交换后,他能不能是他的货币增值.//=====================================================================================================[分析]:其实就是构建出差分约束系统求图中是否
阅读全文
posted @
2011-11-02 11:44
procedure2012
阅读(191)
推荐(0) 编辑
[POJ1789 Truck History]
摘要:[题目来源]:CTU Open 2003[关键字]:图论[题目大意]:给出一个n*7的字母矩阵,每一行代表一种车,那么定义的每种车之间的距离为七个位置上每个相应的位置上不同字母数的和,要求的是不同种车的距离的和得最小值。//=====================================================================================================[分析]:其实就是最小生成树的算法,由于是稠密图所以prim效率更高。[代码]:View Code 1 { 2 PROB:POJ1789 3 DATE:2011\10\14.
阅读全文
posted @
2011-11-02 11:32
procedure2012
阅读(206)
推荐(0) 编辑
[POJ1469 COURSES]
摘要:[题目来源]Southeastern Europe 2000:[关键字]:图论[题目大意]:让每个学生代表一门课程,且每个课程只有一个学生代表行不行?//=====================================================================================================[分析]:如果二分图最大匹配达到了学生数则可行否则不可行[代码]:View Code 1 program Project1; 2 var 3 n, p, tc: longint; 4 map: array[0..1000,0..100...
阅读全文
posted @
2011-11-02 11:28
procedure2012
阅读(198)
推荐(0) 编辑
[POJ1125 Stockbroker Grapevine]
摘要:[题目来源]:Southern African 2001[关键字]:图论[题目大意]:股票经纪人要在一群人中散布一个传言,传言只能在认识的人中传递,题目将给出人与人的关系(是否认识),以及传言在某两个认识的人中传递所需的时间,要求程序给出以哪个人为起点,可以在好事最短的情况下,让所有人收到消息。//====================================================================================================[分析]:先用foyd求出多源最短路,然后枚举每一个作为起点并判断此时所需的最短时间,最后取出最优值
阅读全文
posted @
2011-11-02 10:22
procedure2012
阅读(316)
推荐(0) 编辑
[POJ1035 Spell checker]
摘要:[题目来源]:Northeastern Europe 1998[关键字]:字符串处理[题目大意]:给出一个字典,然后查询一些字符是否能字典中的匹配。匹配是指:1、相等;2、少一个其余相等;3、多一个其余相等。//=====================================================================================================[分析]:只要根据要求一一测试,将正在查的单词与字典中的每一个比对,如果长度相等则判断是否一样,如果多一个则枚举删掉该词的一位再判断是否一样,如果少一个则枚举删掉字典中那个词的一位再判断
阅读全文
posted @
2011-11-02 09:38
procedure2012
阅读(187)
推荐(0) 编辑
[POJ1915 Knight Moves]
摘要:[题目来源]:TUD Programming Contest 2001, Darmstadt, Germany[关键字]:搜索[题目大意]:给出N*N的棋盘和骑士的起点、终点坐标,求最小步数。//=====================================================================================================[分析]:最朴素的算法就是暴力bfs,但肯定会超时--||所以,要用双向广搜,从起点和终点同时搜索,如果走到了或者两者中途相遇说明找到解了即可结束。[代码]:View Code
阅读全文
posted @
2011-11-02 09:18
procedure2012
阅读(153)
推荐(0) 编辑
[POJ1416 Shredding Company]
摘要:[题目来源]:Japan 2002 Kanazawa[关键字]:搜索[题目大意]:将一个数字串拆分为多个数字,使得拆分之后形成的几个整数之和是小于目标值的最大值[分析]:暴力搜索每一种可能的组合,唯一的剪枝就是判断当前是否已经超过上限。[代码]:View Code 1 var 2 n, m, i, min, ans, t, tot: longint; 3 s: string; 4 a, p: array[0..100] of longint; 5 6 procedure dfs(j,k: longint); 7 var 8 i: longint; 9 s2: string;1...
阅读全文
posted @
2011-11-02 09:09
procedure2012
阅读(220)
推荐(0) 编辑
[POJ1496 Word Index]
摘要:[题目来源]:East Central North America 1995[关键字]:数学[题目大意]:输出给定的字符串的编号(a=1,b=2,c=3......z=26,ab=27....),其中不能有重复的字母且必须是升序。//==================================================================================================[分析]:转载请注明出处:優YoUhttp://blog.csdn.net/lyy289065406/article/details/6648501组合数学题,不知道为什
阅读全文
posted @
2011-11-02 08:51
procedure2012
阅读(355)
推荐(0) 编辑
[POJ1195 Mobile phones]
摘要:[题目来源]:IOI 2001[关键字]:线段树[题目大意]:对于一个矩形,一开始全是0,然后会有操作:1、在(x,y)加上某个数;2、查找(l,r)到(b,t)这一子矩形中数字的和。//=====================================================================================================[分析]:用线段树或树状数组进行区间的变更或求和操作,由于是一个二维的所以将每个区间的值改成一个数组记录另一维。每次插入都回直接插入到树的叶子上,所以只要在回溯时顺便更新就行,不用延迟。[代码]:线段树 1 p
阅读全文
posted @
2011-11-02 08:39
procedure2012
阅读(295)
推荐(0) 编辑
[POJ3923 Ugly Windows]
摘要:[题目来源]:Beijing 2008[关键字]:模拟[题目大意]:用字符的形式给出n窗口,以他的编号作为它的边(中间是空的),找出所有在最上层的窗口。//=====================================================================================================[分析]:先找到每一个窗口的左上角,如果找不到则必不可能是最顶上的,然后利用左上角找到可能的宽和长,再以此判断此长和宽是否成立(没有其他窗口覆盖)。[代码]:View Code 1 program Project1; 2 var 3 p...
阅读全文
posted @
2011-11-02 08:28
procedure2012
阅读(241)
推荐(0) 编辑
[POJ1837 Balance]
摘要:[题目来源]:Romania OI 2002[关键字]:动态规划[题目大意]:在一个天平中,有N个挂钩,挂钩距离在[-15..15]之间,-代表在左臂,+代表在右臂,挂钩距离依次从小到大给出。有M个砝码,砝码重量在[-25..25]之间,砝码重量依次从小到大给出。求,用上所有砝码将天平平衡的方法有多少种。//=====================================================================================================[分析]:将所有砝码与所有挂钩相乘,所得就是砝码挂在挂钩上时对平衡的贡献,以边为负另一边
阅读全文
posted @
2011-11-02 08:16
procedure2012
阅读(191)
推荐(0) 编辑
[POJ1159 Palindrome]
摘要:[题目来源]:IOI 2000[关键字]:动态规划[题目大意]:把一个字符串变成回文串所需的最小步骤。//=====================================================================================================[分析]:因为回文串的要求是正着读和倒着读是一样的,即把这个字符串倒置后进行匹配,用动态规划求出所需最小操作数。f[i,j]={f[i-1,j-1]|s1[i]=s2[j],min{f[i-1,j],f[i,j-1]+1|s1[i]<>s2[j]}}。但是最后要除以二,因为两个字
阅读全文
posted @
2011-11-02 08:07
procedure2012
阅读(186)
推荐(0) 编辑
[POJ1080 Human Gene Functions]
摘要:[题目来源]:Taejon 2001[关键字]:动态规划[题目大意]:给出两个基因序列,可以在其中插入‘-',根据给出的每个字母对应的值,求出使这两个变得长度相等所需的最大值。//=====================================================================================================[分析]:就是LCS的变形,其中f[i,j]=max(f[i-1,j-1]+a[ord(s1[i]),ord(s2[j])],f[i-1,j]+a[ord(s1[i],'-')],f[i,j-1
阅读全文
posted @
2011-11-02 07:44
procedure2012
阅读(212)
推荐(0) 编辑
[NDK 优化多重背包]
摘要:单调队列优化多重背包(转自:http://hi.baidu.com/lydrainbowcat/blog/item/d9fb791fc48ae1e0e0fe0bab.html) 多重背包仅涉及体积而不涉及价值的一类可以使用染色在O(nv)时间、20行左右秒过,然而对于涉及价值的多重背包,则要使用二进制拆分物品优化,或者使用效率更高应用更广的单调队列(O(nv))。 若有n种物品,背包容量为m,物品体积、价值、最大使用次数为v,w,c,则朴素的动规方程为:f[i]=max{f[i-v*k]+w*k} (1<=k<=c)。我们把所有可能达到的体积按照除以当前物品体积v的余数划分为0~v
阅读全文
posted @
2011-11-01 23:16
procedure2012
阅读(713)
推荐(0) 编辑
[NDK 十字绣]
摘要:[题目来源]:NOIP基础题集[关键字]:图论 连通性[题目大意]:十字绣一针只能正反交错进行,问对于给定图案至少需要多少针。//=====================================================================================================[分析]:首先将图划分成不同的连通块,每一块至少要用一针,所以只要计算每个块内要用几针再相加。将正面的连线看作正边,反面的为负边。因为对于每一个点,如果有一条正边则代表正面有一条线,有一条负边则代表反面有一条线,而正负边之差,就是以此点位开始的线的数量,而这样的线必定
阅读全文
posted @
2011-11-01 20:42
procedure2012
阅读(168)
推荐(0) 编辑
[Tyvj1108 守望者的逃离]
摘要:[题目来源]:NOIP2007普及组[关键字]:贪心[题目大意]:守望者的跑步速度为17m/s,守望者拥有闪烁法术,可在1s内移动60m,每次使用闪烁法术都会消耗魔法值10点。守望者的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。现在已知守望者的魔法初值M,他所在的初始位置与岛的出口之间的距离S,岛沉没的时间T。计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间能走的最远距离。//======================================================================[分析]:AC做法是贪心。易证闪烁最然需要回
阅读全文
posted @
2011-11-01 11:04
procedure2012
阅读(1458)
推荐(1) 编辑