自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

算法的设计与应用研究

OI = Olympiad in Informatics

  • 博客(55)
  • 收藏
  • 关注

原创 寒假南实集训1

其他学校的都可以做做,地址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106205#overview。2月7号12:00开始,涉及到我们最近做的或者与之相关的一些内容,密码是wintercontest。难度可能中等偏上,各个层次的题目都有一些。

2016-02-15 19:38:39 532

原创 最长升/降/不升/不降子序列:模型、解决及扩展应用

【最长升/降/不升/不降子序列:模型】 简单来说,标题中所说的最长升/降/不升/不降子序列这四种类型,都可以概括成一句话。就是对于这个被选出的子序列中的每一个元素,都大于/小于/不小于/不大于子序列中的前一个元素。如果设原来的序列为A,被选出的子序列为B,并且我们用compare(u,v)来表示子序列中的前后满足关系(即当compare(u,v)为真时,v可以在子序列中在u的后面),那么我们将关系

2016-02-15 19:38:36 1190

原创 高级数据结构 - 线段树(2)

【回顾】 上一次我们讲了一些线段树的基础,地址是http://t.cn/RbQ9gVH,主要涉及的有对区间和单个点的修改、查询。这一篇则相对偏向效率与正确性的证明。【线段树的高度】 首先我们假设线段树有n个节点,那么我们断言这棵线段树的高度不会超过。考虑将n替换成2的整幂次方,使得,而k最小。这很容易实现,一个简单的while循环之类就可以轻易搞定了。然后,以这个2的整幂次方为节点数建一棵线段树,

2016-02-15 19:38:34 1172

原创 bst解题报告 - 二叉排序树的访问次数问题

【题面】bst<span style="font-size:12.0pt;mso-bidi-font-size:10.0pt;font-family:宋体;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-ansi-language:EN-GB;" >相信大家对二

2016-02-15 19:38:27 2312 4

原创 二叉堆

二叉堆是一种高级数据结构,用于动态维护一个序列中的最值以及对某一个数的插入、删除。 我们现在首先定义一下二叉堆,二叉堆首先是一棵完全二叉树,而且根据对这里的最值定义,每一个节点都比其孩子节点更加靠近最值。举个例子,比如说我们要求最大值,那么每一个节点都比起孩子节点要大。这样的话,整一个序列的最大值就是第一个元素,我们称为Heap[1]。当然,我们也可以定义专门的常数root,使得Heap[root

2016-02-15 19:38:21 1322 1

原创 二叉排序树

二叉排序树是信息学竞赛中一个相当简单又相当复杂的东西,其实考到的次数不多,但是还是挺常用的。【定义】 二叉排序树的定义是这样的:设当前节点为o,且节点的数据结构是这样的:struct Node{ Node* left; Node* right; int value; int cmp(int x){ if (value == x) return -1; return value }}; 则:o

2016-02-15 19:38:17 582

原创 树形DP的一些优化

首先,什么是树形DP?树形DP,就是一种利用树的特殊结构,来进行一些DP的规划性题目。一般来说,可以用在树上的规划问题或者说计数问题上。 一般来说,树形DP的基本架构是以某个节点作为DP的一维,接着设某个状态为以root为根节点的子树的某个规划,接着,对于每一个状态,一般来说都是可以从root的所有孩子的状态来进行转移的。 那么,为什么树形DP会正确呢?这可以很容易证明。首先,DP有一个无后效性和

2016-02-15 19:38:13 860

原创 最小生成树

首先给定一个连通图P={V,E},其中V是点集,E是边集。那么,最小生成树就是一个图P'={V,E'},使得P'是联通的,而且:E'上每一条边的边的权值之和最小。也就是说最小。  最小生成树有着很广泛的应用。比如说有若干个点,然后我们需要将这些点用最小的费用连接起来,比如说网线的连接,每一条网线的铺设费用就是相应的边权,那么我们做一个最小生成树就可以选择若干条边,将这个网线的系统连通。 但是,其实

2016-02-15 19:38:07 1230

原创 拓扑排序

给定一个有向无环图,问怎样遍历,才能够使得其中所有的有向边e={u->v}(其中这条有向边是指从e到v),满足u在v之前遍历?这就涉及到一个叫做“拓扑排序”的算法。 “拓扑排序”的原理是什么?倘若我们将有向边e={u->v},中间的v称作“被u控制”,那么每一个点必须要在其的控制点之后输出。比如说下面这张有向图:  我们首先就可以选择到A和F,并依次输出。因为没有人控制它们。然后,我们可以选择到B

2016-02-15 19:38:03 663

原创 无向树的直径(最长的两点间最短距离)

无向树的直径,一个看似不起眼的东西,却牵涉到了许多的问题。【定义】 什么是无向树的直径?就是最长的两点间最短距离。也就是说,对于某两个点i和j,它们间的最短距离最大。而这就是无向图的直径。【分析】 一开始我以为是二分,看到“最短距离最大”,我瞬间就想到了“最小值最大”。但是这是错误的思路。【暴力1:BFS O(n^2+n*m)】 首先,一种暴力的思路,以每个点当做其中的一个点i,用BFS来找到另一

2016-02-15 19:37:58 4223

原创 NOIP2015 TG D2T1 stone

这道题目很简单,就是非常之明显的二分答案。题意要求的石头间最短的间隔最大,就是最小值最大。#include#include#includeusing namespace std;int l, n, m, d[50005];bool check(int value){ int now = 0, ans = 0; for(int i = 1; i if(d[i] - now

2016-02-15 19:37:53 537

原创 NOIP2015 PJ 4 salesman

今年普及组的第四题似乎难度可以比肩提高组前两天的题目。【题意】 给出一个S数组和一个A数组,并且选n次,第i次选i个元素,使得这i个元素中S的最大值*2+每一个选择的元素的A值最大。而且,输入给定的S,满足S1【分析】 首先,可以证明,第i次选择只需要第i次选择再选择一个即可。这不难证明,而且是显而易见的。 其次,我们可以发现,每一次的选择,都只需要比较在最远一个已选择的前面的选择,和后面的选择即

2016-02-15 19:37:48 819

原创 NOIP2015 TG D1T2 message

又是一道简单题。这道题目只不过是江老师讲了一下,我才写解题报告……还有一个原因是介绍了时间戳。【题意分析】 给出一个n个点,n条边的有向图,求最小环的长度。【算法分析】 有三种方法:删点删边、并查集、时间戳。【1:删点删边】 对于对于这样的一个有向图,我们可以发现必然有一个环。当然,也有可能是有若干个环,但是无疑,我们实际上只需要这些环。那其他的多余的、不构成环的点和边怎么办呢?删掉!以样例数据为

2016-02-15 19:37:43 831

原创 LCA实现的三种不同的方法

LCA,最近公共祖先,实现有多种不同的方法,在树上的问题中有着广泛的应用,比如说树上的最短路之类。 LCA的实现方法有很多,比如RMQ、树链剖分等。今天来讲其中实现较为简单的三种算法:RMQ+时间戳、树上倍增(类似二分步长)、Tarjan算法(DFS+并查集)。【RMQ+时间戳】 什么是时间戳?时间戳,就是被访问到的一个次序。比如说我们首先对一棵树进行深搜,在深搜中访问的相应次序就被我们称为时间戳

2016-02-15 19:37:38 11061 3

原创 NOIP 2015提高组 题解+分析

这一次的提高组出的题挺丧心病狂的,似乎比普及组还要容易看出算法,随便就400+。我在洛谷上测得好像是500多。真不知CCF在想什么?算了不说那么多了,直接上分析:(以下的题目中D1A表示第一天第一题,D2B表示第二天第三题,以此类推)题目算法简单分析:【D1A】 简单模拟【D1B】 直接扫一遍找最小环,或者看网上好像有类似拓扑排序剩下回路的方法,总之方法非常多【D1C】 将牌二进制状压,或着记忆化

2016-02-15 19:37:24 1662

原创 NOIP2015题目简单分析

今年的NOIP的前两题比较简单,原题是在NOI题库上的题目,分别是金币http://noi.openjudge.cn/ch0105/40/和扫雷游戏http://noi.openjudge.cn/ch0108/13/,两道题都是相当简单。下面简单分析一下这次考的题目。【金币】 这一道题没有什么好说的,做的方法五花八门,比较简单,我就直接用两个变量j和sum,还有一个每次加1的i,令得i=1,j=0

2016-02-15 19:37:19 2372

原创 单调队列

单调队列,是一种滑动窗口的优化技巧,用于求滑动窗口的最值。单调队列,其实是一种维护区间性单调序列的数据结构,比如说给出一个区间,我要一直求当前的最小值,而且这个区间一直向右或向左滑动,并且给出5*10^6的数据规模,也就是说几乎就是要O(n)算法时,就可以直接用单调队列了。单调队列的时间复杂度是O(n),而且常数比较小,可谓是一个相当好的数据结构。 那么,单调队列的实现又是怎样的呢? 首先,单调队

2016-02-15 19:37:15 621

原创 逆序对 - 树状数组求解 - 高级数据结构

树状数组是一种非常高级的数据结构,用于求解动态的区间和问题。静态的区间和可以用前缀和用O(n)的时间预处理,再以O(1)的时间单次求解。而树状数组,维护的就是动态的前缀和。也就是说,树状数组可以实现下面两个操作:1、修改一个数,将一个位置上的数加上一个值2、求一段数的和 这两个操作的时间复杂度都是O(log2n),而且代码写起来非常简洁,用到了一些二进制的相应思想,比如lowbit(低位技术,求一

2016-02-15 19:37:11 922

原创 高级数据结构 - 线段树(1)

线段树是一种高级数据结构,用于解决区间的动态求最值与求和问题。举个例子,线段树能够解决的问题是像这样的:给出一个序列A,序列A一开始有一个统一的初值S,现要求编写一个程序,能够维护这个序列已达成以下的操作:1、改变一段数,将从Begin到End的所有值全部修改成同一个数Bi;2、求一段数的和,从Begin到End。数据范围:序列的长度 这一道题如果用直接的模拟,代码不会很长,但是效率也是够低的。假

2016-02-15 19:37:06 854

原创 151105 - NOIP知识阶段性总结

现在临近复赛,让我来整理一下我们所已经学的一些知识。【基础】C++语法基础:1.程序的基本结构,循环,选择,判断2.函数的编写3.结构体的编写和面向对象的思想,重载操作符等4.STL的各种函数、容器,以及其时间复杂度的分析5.字符串的各类相应处理基础算法:要求尽量记住排序:1.(基本上没用的)选择排序、冒泡排序、基数排序、希尔排序2.(偶尔有用的)插入排序、归并排序3.(非常常用的)计数排序、快速

2016-02-15 19:37:03 477

原创 IPEOI1 1-4题解题报告

这第一次的IPEOI还是挺简单的,考了一些比较基础的知识,只不过绕了一点点,但可惜还是有很多人没有想出正确的解法。题面在这里:http://pan.baidu.com/s/1eQqah7W。 下面是解题报告:【A:传纸条】【题意分析】 首先有一个长度为S的线段,有N架纸飞机,在第i个时刻被放出的纸飞机会被赋予一个Vi的速度,并做匀速直线运动。而如果一架慢的纸飞机被一架快的纸飞机追上,则快的纸飞机马

2016-02-15 19:36:59 434

原创 POJ 2342 Anniversary Party题解 - 树形DP入门题目

我在做完洛谷的11月月赛后就去找了一些关于树形DP的题目,找到一道挺典型的叫Anniversart Party,是POJ的2342号题目,链接为http://poj.org/problem?id=2342。废话不多说,直接上题解。【题目大意】 某个公司要举办一场宴会,为了增强宴会的活跃度,每个人都不能在宴会中见到他的一个直接上司,已知每个人的活跃度和上司关系,问最多可得到的活跃度为多少?【题意分析

2016-02-15 19:36:55 408

原创 Sparse Table算法 - RMQ问题的简单高效算法

Sparse Table算法是用来解决一类RMQ问题的O(nlog2n)的算法,而且代码非常好写,在本质上是一个动态规划,写起来其实也就是几十行。那么在这里的RMQ问题是什么呢?RMQ问题,中文名应该是范围(区间)最(小)值问题,简单描述一下,就是先给出一个序列,然后不断求若干个区间中的一个最值。比如说最小值,最大值之类。像堆那样的数据结构能解决的问题是整个序列的最值问题,而RMQ问题则是序列一段

2016-02-15 19:36:51 621

原创 10.24南海NOIP模拟测解题报告

这次的模拟测验疏忽颇多,没有掌控好到时间,同时还不小心用了“文件替换”:  而最后一题也是想到了解法没有写出来,第三题写的时候写错了。所以这表现出我的编程能力尚有所不足,还需打好基础。 废话不多说了,直接就上题解。   1、扑克牌      (a.pas/cpp/c)【题目描述】FJ有一副扑克,有52张牌,分为方块、梅花、红桃、黑桃,共4大类,每类都是有13张牌。我们用P表示方块类,用

2016-02-15 19:36:46 1083

原创 Dijkestra算法的理解与相应的优化

Dijkestra算法是由一个叫Dijkestra的人发明的最短路径算法,是一种单源多点的最短路径算法,时间复杂度仅为O(n^2),并且非常高效,甚至可以优化成O(nlog2n),并且理解了之后就非常简单易懂。 其实几乎所有的最短路径算法理解了之后都觉得像BFS,而Dijkestra也不例外。这个算法的具体步骤是这样的:1.将所有点到源点的最短距离全部设为INF,即正无穷大,并将源点到自己的距离设

2016-02-15 19:36:42 1017

原创 洛谷11月月赛总结

NOIP前夕,我为了最后冲刺,到处找题做,于是便发现了洛谷,于是去找题做。 洛谷11月的这次月赛比较简单,虽说是提高组难度,但我在3个小时内且不加检查的情况下做到了129分,而事后再加以检查就变成了209分。。好吧,废话不多说,下次要小心看题,直接先上一点题解:洛谷2614 计算器弹琴本题地址: http://www.luogu.org/problem/show?pid=2614题目描述众所周知,

2016-02-15 19:36:37 1520

原创 FloodFill算法的优化

FLoodFill算法名为“洪水填充算法”,根据在网上所看到的解释,大概也就是找到一个可以访问的点,接着进行DFS或BFS,但是用DFS似乎效率不高,BFS又比较难写,这样还不如直接一遍DFS或BFS呢!于是我就想到了另一种实现的方法,但是因为我也不太清楚FloodFill的具体实现,所以可能这个算法有一点雷同。 这个算法可以不断扩展找多个联通块,但是可能需要用并查集来维护多个联通块,所以可能有点

2016-02-15 19:36:32 1530

原创 NOIP复赛的一些注意事项

NOIP2015的复赛即将到来,在此整理一些注意事项,以防止出错。【常用头文件】 常用的头文件有很多,可以在考试前先预先打好,然后再一次性复制粘贴到程序里面。/*C 标准头文件*/# include //memset(),strcmp()等函数,必须记得 # include //rand(),atoi()之类的函数,C标准的函数库 # include //一些int之类的系统类型的最大

2016-02-15 19:36:28 5476

原创 SPFA最短路算法解析

SPFA是一个比较高效的算法,虽说在比较大的数据时仍然无法比Dijkestra+Heap快,但是代码却很简单,以我的水平而言,代码要短上一倍以上。SPFA这个算法的实用性比较强,所以在OI中是一个相当不错的算法。 SPFA是Bellman-Ford算法的常数优化,如果再加上LLL优化和SLF优化,就更加强大了。下面,我们来剖析其本质:【SPFA的定义】 SPFA的定义和Bellman-Ford的很

2016-02-15 19:36:25 571

原创 TopCoder Srm671 一二题翻译及题解

第1题 染色(paint)现有W*H的棋盘格子,要在其上用蓝色染其中的一些格子,形成一个蓝色的矩形。由于费用问题,你最多只能染色M个格子,请问你能染色的矩形最大面积是多少?【输入格式】(paint.in)   第1行:2个整数W和H,范围在[1…10^6]。   第2行:1个整数M,范围在[1…10^12]。 【输出格式】(paint.out)一个整数,可能的矩形最大

2016-02-15 19:36:21 942

原创 时间复杂度分析在信息学竞赛中的应用

时间复杂度分析是计算机科学中一个非常基础的内容,但同时也是一个非常重要的内容,计算机科学中的许多内容都围绕着时间复杂度的研究展开。而信息学竞赛由于其的竞赛性,更为注重时间复杂度。 本次的NOIP2015初赛中有一道题目,大意是这样的:有一个算法的时间复杂度可用函数T(n)=T(n-1)+n定义,其中T(0)=1,则这个算法的渐近时间复杂度为? 这一道题是一道选择题,有四个答案,O(nlogn),O

2016-02-15 19:36:15 1096

原创 US 2015 Febrary BRONZE 题解

这次的题目倒简单了很多,大部分的思路比较直观,一下子就能想出来一个比较优的算法。所以也不说那么多了,直接上题解:Problem 1. censor审查:FJ订阅了GoodHooveskeeping杂志给他的奶牛在挤奶时看,不幸的是,上面有一篇关于要和谐掉的做牛排的文章,FJ强烈要求不要给他的奶牛们看到。(很明显,这个杂志需要广电总局)FJ把整篇文章的文本整合为一个字符串S,最多有10

2016-02-15 19:36:12 2001

原创 对质数的判断

众所周知,判断质数在许多领域都有着应用。而判断质数是一个NP问题,所以这使得RSA足够安全。 但是在许多的题目中我们仍然要用到判断质数。所以编写一个高效的算法就成了问题。【引入 - 基本方法】 判断质数,最简单的方法就是枚举数字的每一个因子。因为我们知道数的每一个因子都小于这个数,所以最简单的方法就是直接判断:bool isPrime(int Number){ for (int i=2;i if

2016-02-15 19:36:06 738

原创 USACO US OPEN 2015 BRONZE 三四题 C++翻译代码

应江老师的要求,我将官方结题报告中的三、四题的java代码翻译成了C++。顺便还将注释翻译成了中文。但是还没有检查。3、注:该题检查已过。# include # include using namespace std;const int MAXN = 4001;struct Haybale{ int position; int size;};//按坐标的先后排序 int cmp(Haybale a

2016-02-15 19:36:02 1783

原创 USACO 2015 US OPEN BRONZE 铜组 题解

USACO2015 US OPEN BRONZE好吧,我没什么时间了,我就干脆把标程放上去,接着解释一下就行了。 PROBLEM1 MOOCRYPTION 众所不知的,奶牛们很喜欢玩智力游戏。John农夫最近发明了一个有趣的“找单词”游戏。这个游戏的例子如下:USOPENOOMABOMOOMXOPQMROM 作为奶牛,他们只对单词“MOO”有兴趣,这个可能会出现在

2016-02-15 19:35:58 3159

原创 来自洛谷八月月赛的一道数学问题 - 子串和 - 组合数学

这道题大概是这样的:给定一个序列,求这个序列所有子串的的和。 咋一看这道题好像很简单,但是数据范围很大(序列的长度小于等于30)。基本思路是枚举,将所有选到的数加上到一个累计变量上。但是这样显然会超时…… 找一找规律。我们首先把{1,2,3,4}的所有子串列出来:{}{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}{1,2,3}{1,2,4}{1,3,4}{2,3,4}{2,3,5}{

2016-02-15 19:35:51 489

原创 2015-8-7 ACM 模拟赛制测试总结

这次老师给我们展开了一次ACM赛制的测试,只不过题目少很多,每组的人数也多一些,不过那些题都还蛮难的。我们小组做了三题,和其他组几乎一样,也就是那些水题吧~不过有一些人做了一些难题但却没有做水题,正所谓有得必有失吧。这次的题目出自USACO,下面是解题报告:地理 geoTime Limit:10000MS  Memory Limit:65536KTotal Submit:26 Ac

2016-02-15 19:35:47 1884

原创 Escape解题报告 - 提前计算对于程序的帮助 - 贪心算法与动态规划

这个世上有那么一种题目,只需要将数据分类就万分简单,只需要几十行的程序就可以解决,随便蒙一下还能拿个三四十分。这种题目,这里就有一道。4.守望者的逃离(escape)【问题描述】 恶魔猎手尤迫安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去,到那时,岛上的所有

2016-02-15 19:35:41 932

原创 题目题解简单收集

算法分类:1001 动态规划1002 动态规划1003 贪心1004 动态规划1005 动态规划具体题目与题解:1001:smax时间:2015.8.4第一题 smax有N个整数,排成一行。你开始在最左端的数上,每次可以选择跳3步或5步到下一个数,直至跳过所有数,你的得分就是你跳到的数的数值总和。问你能得到的最大分数是多少?[输入格式]第一行:一个正整数N,表示有N个整数。1。第二

2016-02-15 19:35:36 978

原创 哈希 - O(1)的摊销复杂度 - 搜索与哈希(上)

这次老师给我们讲了哈希,但因为时间的缘故,没有写完。现在正好有些时间,便在此补上这篇博客。搜索算法        如果给出一个序列,要求在这个序列中寻找一些元素,那你会怎么做呢?如果允许一些预先操作,你又会怎么做,使得你的方法稳定、高效?        第一种方法是顺序搜索。顺序搜索,就是从某个元素开始,按某个顺序,遍历整个序列,如果找到,则返回找到,反之返回找不到。这种方法的优点,第一是简便

2016-02-15 19:35:31 2253

NOI WC2015课件

全国信息学奥林匹克竞赛的2015年冬令营课件(NOI WC2015,不包含当年题目),对oi选手帮助很大

2018-10-20

NOI WC2014课件

全国信息学奥林匹克竞赛的2014年冬令营课件(NOI WC2014,不包含当年题目),对oi选手帮助很大

2018-10-20

KMP、Mancher和扩展KMP算法详解

KMP、Mancher和扩展KMP算法详解,但是其中的参考代码有一点小错误,请自行参考网络

2016-08-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除