上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 30 下一页
  2012年9月15日
摘要: 带状态的BFS+优先队列。大意:一艘船在海上航行,需要从海上的一点航行到海上的另一点,期间有八种不同方向的风吹过,如果是顺风航行的话,那么不需要消耗燃料,否则消耗燃料+1。思路1:假如从A->B,那么将maze[Bx][By]与现在的方向i相比较,如果相等,则跳过。若不相等,则step++;之后我们有两种处理方法,一是用三维数组int v[SIZE][SIZE][8]判重,我试了试,果断MLE。改为char v[SIZE][SIZE][8],TLE。思路2:判状态不用三维数组判重,而直接用Time[SIZE][SIZE]储存每一个状态的时间,如果q.step<Time[q.x][q 阅读全文
posted @ 2012-09-15 18:29 有间博客 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 简单BFS+优先队列。CODE:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>usingnamespacestd;#defineSIZE21#defineINF0x3f3f3f3fconstintdx[]={1,-1,0,0};constintdy[]={0,0,-1,1};charmaze[SIZE][SIZE];intTime[SIZE][SIZE];intN,M;intbx,by,ex,ey;inttS,tP,tT;structnode{friendb 阅读全文
posted @ 2012-09-15 14:43 有间博客 阅读(224) 评论(0) 推荐(0) 编辑
  2012年9月14日
摘要: 大意:给你一个源点,让你从这里派发n个学生去其余的n-1个站点去邀请人们去CSS,然后再返回CSS,使得总的cost最小。思路:(1)过去的时候:求一次最短路,将所有的d[i]相加。(2)回来的时候:我开始想把SPFA所有的点,然后相加,估计会超时。由于是有向边,可以用到一个巧妙的转移的方法,我们将有向边反向,由于题目保证所有的点均可到达,所以SPFA源点,然后相加可得结果。CODE:#include<iostream>#include<cstdio>#include<cstring>#include<queue>usingnamespacest 阅读全文
posted @ 2012-09-14 20:52 有间博客 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 差分约束基本题型: 给出一个序列,1至n这n个数字,然后已知从i 到j 的数字和至多a、至少b,给出这么一组,然后求每个数字最小为多少,或者求总和最小为多少。 于是构造,设s[i]为0到i的和,那么s[1]即为第一个数字,s[2]-s[1]即为第二个数字,于是给出的条件转换为:s[i] - s[j] >= bs[i] - s[j] <= as[i] - s[i-1] >= 0s[i] - s[i-1] <= V (*如果是1到n这n个容器,每个容器有容量,或者特殊情况n个布尔值,那么需要加上这个限制条件)题目大意:给出一些区间[ai,bi]和每个区间最少需要几个点ci, 阅读全文
posted @ 2012-09-14 14:56 有间博客 阅读(545) 评论(0) 推荐(0) 编辑
  2012年9月13日
摘要: 最低要求:SPFA ,dijkstra,prim, Kruskal, floyd,Bellman-Ford二分图匹配,拓扑排序,欧拉回路通路,并查集,树状数组,线段树,各种背包,二叉树,KMP, 高精度, 字典树矩阵乘,高次幂取模均要达到不看模板快速敲出的能力稍微不低的要求:LCA,tarjan, RMQ,Kosaraju 等均要理解透彻 各种缩点,割点,割边等熟练后要不看模板中等要求:网络流,2-SAT等 各种神奇建图后缀数组,AC自动机,DLX,各种树,treap,树形DP,左偏树等状态压缩,高级要求:需要DP和数据结构等优化的综合题http://972169909-qq-com.itey 阅读全文
posted @ 2012-09-13 21:55 有间博客 阅读(449) 评论(0) 推荐(0) 编辑
摘要: [记号]记加权图G(V,E):w(u,v)。记路径p的长度为w(p)。[预备知识]<单源最长路及其求法>最长路的定义与最短路是对偶的。对加权图G(V,E):w(u,v)及源点s∈V。若对于某一点v∈V,存在一条从s到v的路径p*使得w(p*) >= w(p),其中p为从s到v的任意路径,则称p为从s到v的最长路,w(p*)为最长路长度,记做D[v]。如果图中不存在正权环,则对于任意v∈V,D[v]都是一个确定的有界值。(注意:在最长路问题中,若(u,v)不属于E,则隐式地有w(u,v)=-INF,这和最短路是相类似的)<最长路求解>那么如何求对于每一点的最长路长度 阅读全文
posted @ 2012-09-13 19:27 有间博客 阅读(3771) 评论(0) 推荐(3) 编辑
  2012年9月12日
摘要: 大意:给定你一些商品的信息save(字符串),然后输入需要查询的字符串str,如果存在一个字符串save使得str是save的子串。思路:字典树的变形,如存在"abcd",则"bcd", "cd", "d",都需要插入字典树中。如果存在"abab"的话,有可能"ab"会重复计数,所以需要一个特定的序列号来区分是否是同一序列中的子串。我们可以定义一个value,若value相同,则跳过,若不同,则+1后更新value。例如:假设总共有4个商品信息5 5 5 5a b a b 5 阅读全文
posted @ 2012-09-12 21:54 有间博客 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 大意:给你一段单词,若给定的单词中有一个是另外两个单词合并而成的话,则输出。思路:Trie+枚举,每输入一个单词,插入进Trie中,然后枚举它所有的前缀数,然后通过函数strncpy函数确定剩余的字母组成的单词,然后通过Trie的基本查找来确定是否包含两个单词。CODE:#include<iostream>#include<cstring>#include<cstdio>usingnamespacestd;structTrie{Trie*next[26];intvalue;Trie(){for(inti=0;i<26;i++)next[i]=0;val 阅读全文
posted @ 2012-09-12 19:10 有间博客 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 大意:给你一些木筷子,让你去加工,如果后一个的长度,重量都比前一个的大的话,不需要调试的时间,否则调试的时间+1,求最小的调试时间。思路:跟最小拦截系统有点相像。解题思路:对木棍的长度和重量进行排序,以长度为首要考虑。排序完后的不一定都是下一根木棍重量和长度都大于前一根的。于是,我们对排序后的数组进行多次扫描,将可以在一次建立时间内完成的进行标记,知道木棍全部标记(设置一个外部变量来计数已扫描的元素的数量)。例子:54 9 5 22 1 3 5 1 4排序完后:1 4 2 13 54 95 2然后进行第一次扫描:使用mark[]数组进行标记,mark[]初始化为0,红色为第一次描过的。Stik 阅读全文
posted @ 2012-09-12 11:20 有间博客 阅读(232) 评论(0) 推荐(0) 编辑
  2012年9月11日
摘要: 字典树,处理数据较麻烦。CODE:#include<iostream>#include<ctype.h>#include<stdio.h>#include<stdlib.h>usingnamespacestd;structTrie{Trie*next[26];charsave[12];intvalue;Trie(){for(inti=0;i<26;i++)next[i]=0;value=0;}};voidinsert(Trie*&root,char*sz1,char*sz2){inti=0,branch=0;Trie*p=root; 阅读全文
posted @ 2012-09-11 21:47 有间博客 阅读(236) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 30 下一页