随笔分类 -  算法--套题总结

摘要:Problem A 客户数量 可以得出将长度为 len的蛋糕切成 len段 1的,不管如何切,总花费都为 len*(len-1)/2 对于每个顾客,来到的时间st,以及需要的蛋糕长度k,则有一个终止时间ed = st+k*(k-1)/2 对每个顾客求出其服务终止时间,然后得到n个区间,将区间以终点排序,然后线性扫过去,用i的起点时间与前一个服务顾客 的终点时间比较即可。 时间复杂度 O( NlogN )View Code #include<cstdio>#include<cstring>#include<algorithm>#include<casse 阅读全文
posted @ 2013-04-12 12:31 yefeng1627 阅读(335) 评论(0) 推荐(0)
摘要:A Jason的特殊爱好 组合数学, 通过计算 [1,n]区间数量解决. 假设n十进制表示位数为L,则通过统计长度为 L, L-1, ..., 1的数量来得出结果. 假设 n = a1,a2,a3,...,aL // 十进制表示,其中a1为高位 一.当长度小于L, 假设其为 len = 1,2,...,L-1 则当前数 X = a1,a2,a3,...,a_len 因为 Length(X) < Length(N), 所以任意的X都小于N, 我们可以枚举 X中包含的1的个数,假设其为 K, 则 K = 0,1,2,...,len... 阅读全文
posted @ 2013-04-06 18:32 yefeng1627 阅读(292) 评论(0) 推荐(0)
摘要:未解决的题 F.Arrange Books并查集+树状数组。如果不考虑抽出书本的操作,这是一道相对简单的并查集题目,只需给每本书再开一个域,记录其上有多少本书即可。我们发现,当书堆起来的时候,可以按照从上到下的顺序给每本书重新编号,如果抽出一本书,则可以在这本书的新编号上标记-1,表示删除。如果要统计书本i(设书本i的新编号为y)上有多少本书,则可以把它最上面的那本书的新编号x找出来,数x到y之间有多少本书被删掉,然后就能得解。从这时候想到了什么?树状数组!所以,我们先把所有操作存起来,然后进行一次堆书的操作,这时候不考虑抽出书,根据最后的书在各自书堆的顺序,给一个新编号。最后,重新进行一次. 阅读全文
posted @ 2013-04-05 22:11 yefeng1627 阅读(191) 评论(0) 推荐(0)
摘要:Just a note because of a failure understand for the Path Cover 以下内容均来自:http://en.wikipedia.org/wiki/Path_cover 对于有向图 G Belong (V,E), 一个路径覆盖就是:一个由多条有向路径组成的集合,并且每一个顶点 v Belong V, 其至少(同时也至多)属于一条路径. 注意,一个路径覆盖可能包含路径长度为0的情况.(单个顶点时). 路径覆盖也能够定义为: 一个不相交的路径覆盖. 一个由多条路径组成的集合,每一个顶点 v Belong V 都准确的属于一条路径. ... 阅读全文
posted @ 2013-04-02 22:56 yefeng1627 阅读(930) 评论(0) 推荐(0)
摘要:A 简单DP,状态DP[I][J] 表示第I个时间位置为J的最小花费View Code #include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>const int INF = 0x3f3f3f3f;#define MIN(a,b) (a)<(b)?(a):(b)int dp[21][510];int val[21];int n, k;int main(){ while( scanf("%d%d", &n,&k) != EOF 阅读全文
posted @ 2013-03-31 21:23 yefeng1627 阅读(220) 评论(0) 推荐(0)
摘要:本文转载自http://www.felix021.com/blog/read.php?2040,如是转载文则注明原出处,谢谢:)Google Reader 订阅点击这里,RSS地址:http://www.felix021.com/blog/feed.php。源于这两篇文章:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome 阅读全文
posted @ 2013-03-31 13:45 yefeng1627 阅读(150) 评论(0) 推荐(0)
摘要:游戏开始时有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。游戏者在每次操作时可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。游戏者轮流操作,将最后一枚硬币移至地上的人获胜。 分析:这个问题与nim游戏的区别在于移走的硬币不是被扔掉而是被放进了另一堆硬币之中,考虑能否将这一部分楼梯排除考虑范围。奇数号楼梯只能将硬币扔到偶数号楼梯之中,同样偶数号楼梯上的硬币也只会被扔上奇数号楼梯。只考虑奇数号楼梯nim,若偶数楼梯只作容器,那么游戏变为nim。当偶数号楼梯上的硬币可以将硬币移出时,我们是不是仍然可以用nim的方法判断必败状态?将奇数台阶的硬币 阅读全文
posted @ 2013-03-31 13:38 yefeng1627 阅读(572) 评论(0) 推荐(0)
摘要:刘雅琼PPT讲解链接:http://www.doc88.com/p-216945446450.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-1]的最大的z值(也就是B的自身匹配)。设目前next[0. 阅读全文
posted @ 2013-03-31 13:37 yefeng1627 阅读(185) 评论(0) 推荐(0)
摘要:本文转载自:http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9曾经看过如下一个公式:以上的公式如果第一次见到,难免有不少疑惑:为什么可以这么写?限制条件为什么是x >= Phi(C),这个公式为什么正确?今天突发奇想,在纸上YY以后得到了以下证明(个人证明,如果有问题欢迎提出)定理 1:对于一个数对(A,C) 必然存在一个最小的正整数 L,满足其中SPOS 是一个大于等于0的整数(下面具体介绍)我们称L 为(A,C) 的最小循环节长度证明:根据鸽巢原理,得到在x >= C 后必然出现循环,从而定理得证.定理 2:对 阅读全文
posted @ 2013-03-31 13:35 yefeng1627 阅读(208) 评论(0) 推荐(0)
摘要:本文内容转载自Matrix67大神:http://www.matrix67.com/blog/archives/333除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题。比如,有时我们需要知道给定的两个字符串“有多像”,换句话说两个字符串的相似度是多少。1965年,俄国科学家Vladimir Levenshtein给字符串相似度做出了一个明确的定义叫做Levenshtein距离,我们通常叫它“编辑距离”。字符串A到B的编辑距离是指,只用插入、删除和替换三种操作,最少需要多少步可以把A变成B。例如,从FAME到GATE需要两步(两次替换),从G 阅读全文
posted @ 2013-03-31 13:33 yefeng1627 阅读(583) 评论(0) 推荐(0)
摘要:1. 概述同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不是二叉堆,二叉堆必须是完全二叉树,而Treap可以并不一定是。2. Treap基本操作为了使Treap 中的节点同时满足BST性质和最小堆性质,不可避免地要对其结构进行调整,调整方式被称为旋转。在维护Treap 的过程中,只有两种旋转,分别是左旋转(简称左旋)和右旋转(简称右旋)。左旋一个子树,会把它的根节点旋转到根的左子树位置,同时根节点的右子 阅读全文
posted @ 2013-03-31 13:27 yefeng1627 阅读(185) 评论(0) 推荐(0)
摘要:A 错排公式 d[n] = (n-1)*(d[n-1]+d[n-2]);View Code #include<stdio.h>typedef long long LL;LL d[110];const int mod = 1e9+7;void init(){ d[1] = 0; d[2] = 1; for(int i = 3; i <= 100; i++){ d[i] = 1LL*(i-1)*(d[i-1]+d[i-2])%mod; } }int main(){ init(); int T; scanf("%d",&T); ... 阅读全文
posted @ 2013-03-31 12:48 yefeng1627 阅读(220) 评论(0) 推荐(0)
摘要:---恢复内容开始---Bron-Kerbosch算法计算图的最大全连通分量(团clique)最大独立集: 顶点集V中取 K个顶点,其两两间无连接。最大团: 顶点集V中取 K个顶点,其两两间有边连接。最大团中顶点数量 = 补图的最大独立集中顶点数量补图定义: G=<V,E> thecomplementofG,\bar{G}=<V,V\timesV-E> 详见连接:http://zh.wikipedia.org/wiki/%E8%A3%9C%E5%9C%96 更详细的:http://en.wikipedia.org/wiki/Bron%E2%80%93Kerbos... 阅读全文
posted @ 2013-03-31 12:33 yefeng1627 阅读(19600) 评论(1) 推荐(3)
摘要:感谢其它高校的负责人,严格的审题等工作~~~。预祝大家本场训练赛玩的高兴。。。训练赛 RankList解题报告转摘自 Lyush A.简单的想法题。使用hash表或者是map存储所有数,然后从最小的数开始找从这个数开始的连续P倍数的个数X,那么需要删除的数的个数为X/2。View Code #include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <map>#include <cassert>#include <c 阅读全文
posted @ 2013-03-30 15:01 yefeng1627 阅读(988) 评论(2) 推荐(0)
摘要:就做了签到题..... 菜的掉渣了..都... A 题....签到题,竟然搞晕了半天... 其实第三种操作, 因为 60*k - (60-x)*k = 0 (mod 43200) 转化成 x*k = 43200*B, 因为是浮点型, 直接求单位的 k = (43200/x)*K*60 sView Code #include<stdio.h>#include<stdlib.h>#include<string.h> typedef long long LL;int gcd( int a, int b ){ return b == 0 ? a : gcd( b, 阅读全文
posted @ 2013-03-29 22:35 yefeng1627 阅读(261) 评论(0) 推荐(0)
摘要:前言:关于区间最值问题的求解,我们一般采用线段树来维护区间最值,得到了O(NlogN)的算法。但对于区间第k值问题,我们应该如何解决呢?本文将介绍一种基于线段树思想衍生出来的新结构——划分树,来解决这个问题。1 划分树其实,划分树和线段树的区别并不大,可以归纳为两点: 1.1 划分树每一个区间[L,R]维护的是一个一维数组[L..R]。 1.2 划分树每一个根结点[L,R]中前[(R-L+1)/2]小的点组成左子树,后[(R-L+1)/2]大的点组成右子树。2 划分树求区间k值 我们首先修改一下思考方式,原问题变成在已经sorted的数列中找出第k个在区间[s,t]中的数字。 先给出一... 阅读全文
posted @ 2013-03-29 14:06 yefeng1627 阅读(211) 评论(0) 推荐(0)
摘要:何冬州的百度空间Blog本文的另一版本:http://hi.baidu.com/wsktuuytyh/blog/item/396a934ac679680208f7ef2c.html信息革命先驱者/数学电脑爱好者注: wsktuuytyh 即何冬州 三字的五笔编码主页博客相册|个人档案|好友|个人中心|i贴吧写新文章素数计数公式全面拉丁化改写-小有改进-Meissel公式-梅塞尔-Lehmer公式-莱梅=勒梅尔-筛法三种形式-孟庆余公式2012年06月13日 星期三6:17本文标题:素数计数公式全面拉丁化改写-小有改进-Meissel公式-梅塞尔-Lehmer公式-莱梅=勒梅尔-筛法三种形式-孟 阅读全文
posted @ 2013-03-29 13:16 yefeng1627 阅读(3169) 评论(2) 推荐(0)
摘要:A小Q系列故事——为什么时光不能倒流 转换成秒后模拟即可View Code #include<stdio.h>#include<stdlib.h>int main(){ int T; scanf("%d", &T); while( T-- ){ int h1,m1,s1; int h2,m2,s2; int mod = 12*60*60; scanf("%d:%d:%d",&h1,&m1,&s1); scanf("%d:%d:%d",&h2,&m2,&s2 阅读全文
posted @ 2013-03-22 22:42 yefeng1627 阅读(227) 评论(0) 推荐(0)
摘要:A小Q系列故事——电梯里的爱情 模拟,同一楼层下去的人不需要多次开门~~~View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;const int N = 110;int a[N],b[N], n;int main(){ int T; scanf("%d",&T); while( T-- ){ scanf("%d", &n); for(int 阅读全文
posted @ 2013-03-22 22:33 yefeng1627 阅读(174) 评论(0) 推荐(0)
摘要:A.跑步 二分枚举距离,然后构图用并查集判联通数量是否大与等于N,时间复杂度是 Nlog(N),因为所给坐标较大,注意求解距离时强制转换,防止溢出~View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>#include<math.h>using namespace std;const int N = 510;const double esp = 1e-8;int n, m, st[N], rank[N];double dis[ 阅读全文
posted @ 2013-03-19 21:12 yefeng1627 阅读(170) 评论(0) 推荐(0)

Launch CodeCogs Equation Editor