国家集训队2008论文集浅谈信息学竞赛中的区

国家集训队2008论文集浅谈信息学竞赛中的区
国家集训队2008论文集浅谈信息学竞赛中的区

浅谈信息学竞赛中的区间问题

华东师大二附中

周小博

【摘要】

本文对一些常用的区间问题模型做了简单介绍,包括一些算法及其正确性的证明,并从国际、国内的信息学竞赛与大学生程序设计竞赛中选了近10道相关例题,进行简要分析。

【关键字】

区间模型转化贪心动态规划优化

在信息学竞赛中,有很多问题最终都能转化为区间问题:例如从若干个区间中选出一些满足一定条件的区间、将各个区间分配到一些资源中、或者将一些区间以某种顺序放置等。这类问题变化繁多,解法各异,需要用到贪心、动态规划等算法,并可以用一些数据结构优化算法。

本文将从几个方面对区间问题做一个简单的介绍,给出一些算法及其正确性的证明,具体分如下几个方面进行讨论:

1.最大区间调度问题

2.多个资源的调度问题

3.有最终期限的区间调度问题

4.最小区间覆盖问题

5.带权区间调度、覆盖问题

6.区间和点的有关问题

我们将对上述每个问题都给出基本模型、算法、证明及其实现,并从ACM-ICPC、CEOI、CTSC等比赛中选出了近10道相关例题,进行简要分析,有的例题还给出了各种不同的算法及其时间效率的分析。

本文中所讨论的问题主要由两个部分组成,一部分为近几年来各类竞赛题的归纳总结,另一部分来自于参考文献。

数轴上有n 个区间,选出最多的区间,使得这些区间不互相重叠。

算法:

将所有区间按右端点坐标从小到大排序,顺序处理每个区间。如果它与当前已选的所有区间都没有重叠,则选择该区间,否则不选。

证明:

显然,该算法最后选出的区间不互相重叠,下面证明所选出区间的数量是最多的。设i f 为该算法所接受的第i 个区间的右端点坐标,i g 为某最优解中的第i 个区间的右端点坐标。

命题1.1 当1≥i 时,该算法所接受的第i 个区间的右端点坐标i f ≤某最优解中的第i 个区间的右端点坐标i g 。

该命题可以运用数学归纳法来证明。对于1=i ,命题显然为真,因为算法第一个选择的区间拥有最小右端点坐标。令1>i ,假定论断对1-i 为真,即11--≤i i g f 。则最优解的第i 个可选区间所组成的集合包含于执行该算法时第i 个可选区间所组成的集合;而当算法选择第i 个区间时,选的是在可选区间中右端点坐标最小的一个,所以有i i g f ≤。证毕。

设该算法选出了k 个区间,而最优解选出了m 个区间。

命题1.2 最优解选出的区间数量m =该算法选出的区间数量k 。

假设k m >,根据命题1.1,有k k g f ≤。由于k m >,必然存在某区间,在k

g 之后开始,故也在k f 之后开始。而该算法一定不会在选了第k 个区间后停止,还

会选择更多的区间,产生矛盾。所以k

m≤,又因为m是最优解选出区间个数,所以k

m=。

综上所述,算法选出的区间是最优解。

实现:

在判断某个区间与当前已选的所有区间是否重叠时,可以直接判断是否和所选的最后一个区间是否重叠。时间复杂度:排序()n

O log。

n

n

O=()n

O log+扫描()n

例题1:Latin America - South America 2001 Problem A

题目大意:

基因是由许多外显子(exon)组成,每个外显子都有一个起始位置和一个结束位置。两个外显子能够互相联接必须满足某个外显子的起始位置在另一个外显子的结束位置之后。给出()

n个外显子,要求找到一条由外显子组成

0<

1000

的基因链,使得外显子数量最多。

分析:

将每个外显子看作一个区间,两端点坐标分别为外显子的起始、结束位置。则现在的问题和原问题基本相同,只是端点上也不能重叠。这里就不写算法了。

有n个区间和无限多的资源,每个资源上的区间之间不互相重叠。将每个区间都分配到某个资源中,使用到的资源数量最小。

定义区间集合深度d为包含任意一点的区间数量的最大值,则显然有:

命题2.1 需要的资源数至少为d。

设区间1I ,2I ,…,d I 全部包含某一点,则必须把这些区间分配到不同资源中,故至少需要d 个资源。

其实竞赛中也出现过计算区间集合深度的题目,如North America – Northeast 2003 Problem E 。下面给出计算区间集合深度的算法。

d 的计算方法:

将每个区间拆成两个事件点,按坐标从小到大排序,顺序处理每个区间。记录一个值t ,表示当前点被包含次数。每次遇到区间的左端点就+1,遇到右端点就-1。d 的值就是在该过程中t 的最大值。注意两个相同坐标不同类型的事件点的位置关系和区间是否能在端点处重叠有关,这在排序过程中应该注意。时间复杂度为排序()n n O log +扫描()n O =()n n O log

由此可得出一个构造算法。

算法1:

计算出d 。将所有区间按左端点坐标从小到大排序,顺序处理每个区间。处理某个区间时,排除在它前面且与之重叠的区间所用到的资源,然后在1,2,3,…,d 这些资源中任意分配一个未被排除的资源。

证明:

设排序后的n 个区间分别为1I ,2I ,…,n I

命题2.2 每个区间都能分配到一个资源。

考虑任何一个区间j I ,假设存在t 个区间在它前面且与之重叠。一定有

d t ≤+1,否则由于这1+t 个区间都包含j I 的起始时刻,与d 的定义矛盾。故有1-≤d t ,从而在d 个资源中至少有一个资源没被这t 个区间排除。所以对于每个

区间,都至少有一个可分配资源。证毕。

命题2.3 没有两个互相重叠的区间被分配到了同一个资源。

考虑任意两个互相重叠的区间1j I 、2j I ,其中21j j <。当算法在处理区间2

j I 时,区间1j I 所用资源已经被排除,所以不会被分配到同一资源。

综上所述,该算法可以成功的构造出正好使用d 个资源的一组解,而根据命题2.1,所用资源的下限是d ,故该解是用到资源数量最少的解。

实现:

区间分配资源时,如果直接做排除,则时间复杂度为()2n O ,当然可以通过记录每个资源的最大右端点坐标以将时间复杂度降为()nd O ;由于可以每次找一个最大右端点坐标最小的资源,故可以用一个优先队列来储存每个资源的最大右端点坐标。

用二叉堆实现该优先队列,每次查找最小值的时间复杂度为()1O ,修改关键字的时间复杂度为()d O log ,分配资源操作的时间复杂度也就降为()d n O log 。故

总时间复杂度为:d 的计算()n

n O l o g +排序()n n O l o g +分配资源()d n O l o g =()()nd n O log 。其实这里可以不计算出d ,而通过不断地增加资源数量

来使所有区间都能分配到资源。

该算法同时也证明了以下命题:

命题2.4 用到的资源数量的最小值为区间集合深度d 。

基于这个命题,我们很容易想到另外一种算法。

算法2:

计算d 。将所有区间按右端点坐标从小到大排序,顺序处理每个区间。对于每个区间,都在1,2,3,…,d 这些资源中分配一个可用的且右端点坐标最大的资源。

证明:

显然每个资源上的区间都不互相重叠,下面证明每个区间都能分配到一个可用资源。用一个元素个数为d 的有序表i S (表中元素始终从小到大排序),记录处理i 个区间后,各个资源的最大右端点坐标(当某个资源从没被用过时,可认为值为∞-)。同样用表i S '表示处理i 个区间后,某最优解的状态(根据命题2.5,该表中元素个数也是d )。状态i S '不优于i S 状态指[][]j S j S d j i i '≤≤≤?,1。

命题2.5 处理完第()1≥i i 个区间后,某最优解此时的状态i S '不优于运行该算法后此时的状态i S 。

该命题可以运用数学归纳法来证明。对于1=i ,命题显然为真,因为第一个区间无论分配哪个资源,状态都是一样的。令1>i ,假定论断对1-i 为真,即

[][]j S j S d j i i 11,1--'≤≤≤?。设处理第i 个区间时,该算法分配的资源是[]11j S i -,在

最优解中分配的资源为[]21j S i -。设第i 个区间的右端点坐标为[]i e 。

表i S 更新为:[][][][][][][]()i e d S j S j S j S S S i i i i i i ,1,,2,1,1,,2,1111111111-?++-?------; 表i S '更新为:[][][][][][][]()i e d S j S j S j S S S i i i i i i ,1,,2,1,1,,2,1121212111-'?+'+'-'?''------。

而该算法分配的资源[]11j S i -在所有可分配资源中拥用最大右端点坐标,故区间i 的左端点坐标小于[]111+-j S i ,又[][]111111+'≤+--j S j S i i ,所以12j j ≤。 ⑴当21j j <≤时:[][][][]j S j S j S j S i i i i '='≤=--11;

⑵当12j j j <≤时:[][][][][]j S j S j S j S j S i i i i i '=+'≤'≤=---1111;

⑶当d j j <≤1时:[][][][]j S j S j S j S i i i i '=+'≤+=--1111; ⑷当d j =时:[][][]i e j S j S i i ='=。

所以有[][]j S j S d j i i '≤≤≤?,1,证毕。

命题2.6 每个区间都能分配到一个资源。

处理第i 个区间时,状态可用1-i S 表示。最优解肯定能给该区间分配到资源,设为[]01j S i -'。根据命题2.5,[][]0101j S j S i i --'≤。则运行该算法时,至少可以给该区间分配资源[]01j S i -。证毕。

综上所述,该算法可以成功的构造出正好使用d 个资源的一组解,而根据命题2.1所用资源的下限是d ,故该解是用到资源数量最少的解。

实现:

考虑如何分配资源。如果直接记录每个资源的最大右端点坐标,时间复杂度为()nd O 。可以用证明中所提到的有序表,用一个平衡二叉树来维护它。每次处理某个区间时,可以在()d O log 时间内找到合适资源,并在()d O log 时间内修改该资源结束时间。这样做的总时间复杂度也是()()nd n O log 。

第一个构造算法证明了最少所用资源的数量,并用编程复杂度较低的方法构造出了可行解。第二个贪心算法是基于第一个算法的结论得到的,编程复杂度也比第一种高,然而利用它的局部最优性,还可以附加更多的条件。

例题2:2004年广东省大学生程序竞赛试题 Problem B 题目大意:

一个港口被分成了()101≤≤m m 个区域,每个区域最多允许同时停靠

()10000≤r r 艘船,每艘船都只能停靠在特定的一个区域。有()1000001≤≤n n 艘

船,已知每条船的到达时刻、离开时刻和它应该进入的区域。求一个调度方案使得能有最多的船得以停靠。

分析:

显然每个区域都可以单独处理。可以把船看作一个区间,则该问题是问题2的一个变化:规定使用资源的数量r ,问最多能选出多少区间。在算法2上稍加改动即可得出该题的算法。

算法:

将所有区间按右端点坐标从小到大排序,顺序处理每个区间。对于每个区间,若能找到可用资源,则将该区间安排到一个可用的且右端点坐标最大的资源;若找不到,则不去选它。

在前面的证明中我们已经证明了选择资源的局部最优性,唯一剩余的问题是区间的取舍。如果该算法选择了某区间I ,而某最优解中没有选它,显然最优解选择了一个与该区间重叠且右端点坐标大于等于它的区间I ',我们用I 替换I ',就构成了一个包含I 的最优解;如果该算法没有选择某区间,显然最优解也不会选择该区间。故该算法得出的解就是最优解。

实现:

还是利用平衡二叉树维护资源信息并寻找合适资源,处理每个区间的时间复

杂度是()r

O l o g ,故总时间复杂度为:排序()n n O l o g +处理区间()()r O n O log ?=()()nr n O log 。

有n 个长度固定、但位置可变的区间,将它们全部放置在),0[+∞上。每个区

间有两个已知参数:长度i t 和最终期限i d ,设i f 为其右端点坐标。定义

???≤>-=i i i

i i i

i d f if d f if d f l 0,{}i n i l L ≤≤=1max 。放置所有区间,使它们不互相重叠且最大延迟L 最小。

算法:

将所有区间按最终期限从小到大排序,顺序安排各区间,使中间没有空闲段。

证明:

由于该算法所有区间都顺序放置,因此区间之间不互相重叠。下面证明该算法求出的L 最小。

命题3.1 存在一个没有空闲段的最优解。

若在某最优解中,两相邻区间i 、1+i 之间有空闲段,可将将1+i 、2+i 、…、

n 全部往左移,直至i 、1+i 之间没有空闲段。显然1+i f 、2+i f 、…、n f 减小,即

1+i l 、2+i l 、…、n l 减小。所以此时的最大延迟L '一定小于等于原先的L ,又L 已

是最小值,所以L L ='。因此任何一个有空闲段的最优解不断地进行上述操作后终会变成一个没有空闲时间的最优解。证毕。

命题3.2 任何一个既没有逆序、又没有空闲段的解有着相同的最大延迟L 。

如果解中既没有逆序、又没有空闲段,那么相同最终期限的区间只有在次序上可能不同。而这些区间的最大延迟只和最后一个区间的右端点坐标有关,区间的次序却并不影响最后一个区间的右端点坐标,所以最大延迟始终相同。证毕。

命题3.3 既没有逆序、又没有空闲段的解是最优解。

根据命题3.1,存在一个没有空闲段的最优解。假设某最优解中相邻的某两区间i 、1+i 为逆序关系,即有1+>i i d d 。设区间i d 的左端点坐标为0t ,若交换两

区间,则原来两区间的右端点坐标为i i t t f +=0,101++++=i i i t t t f ,现在则分别为

101+++='i i t t f ,10+++='i i i t t t f 。

设两区间在交换前后的延迟分别为i l 、1+i l 、i l '、1+'i l 。 因为{}{}1111111111,max ,max ++++++++++≤≤''??

??

??

≤'????<'>≤'?<'i i i i i i i i i i i i i i i l l l l l l l f f d d l l f f ,所以i l 、1+i l 不优于i l '、1+'i l 。因此一个存在逆序的解交换相邻的逆序项可以使之更优,只要将一个有逆序的解不断进行上述操作后都能成为一个无逆序的解。证毕。

综上所述,该算法成功构造了一个最优解。

实现:

按算法直接模拟。时间复杂度:排序()n n O log +扫描()n O =()n n O log 。

一般在区间位置可变时,最优解中各区间位置常常是按照最终期限排序,交换最终期限互为逆序的区间总能使结果更优。当然区间带权时,要另外考虑。

例题3.1:CTSC 2007 DAY2 pendant 题目大意:

有()200000≤N N 粒缀珠,每粒缀珠有两个参数:挂钩的最大承受重量i C 和本身重量i W 。将缀珠经挂钩连接后挂起形成挂坠,要求每粒缀珠下方的缀珠重量之和不能超过它挂钩的最大承受重量。问挂坠最多能由多少个缀珠组成,并求出满足缀珠数量最多时挂坠质量的最小值。

分析:

把每粒缀珠看作一个长度为i W 的区间,这些区间的位置是可变的。则问题转化为:选出最多的区间,并将它们不互相重叠地放置在),0[+∞上,使得左端点

坐标不能超过i C 。在保证区间数量最大时,需求出最大右端点坐标的最小值。

根据原问题,容易证明下面这个结论:显然必有一个最有解,它的区间按最后期限i i C W +排序,连续地放置在),0[+∞上。(证明和原问题的证明方法类似)在这个结论的基础上,可以得出以下两种算法。

算法1:

容易想到一个()2N O 的动态规划。将区间按i i C W +的值从小到大排序,设

[]j i f ,为前i 个区间,选取了j 个区间后,最大右端点坐标的最小值。则对于任意

一个合法的],[j i f ,做下面的两个动态转移:若第1+i 个区间不选:

[][][]{}j i f j i f j i f ,,,1mi n

,1+=+;若1],[+≤i C j i f ,则可以选择该区间:[][][]{}1,,1,1m in 1,1++++=++i W j i f j i f j i f 。状态数为()

2N O ,状态转移时间为

()1O ,故时间复杂度为()2N O 。然而仅仅()2N O 是不够的,还需要优化。

优化:

设[][][]1,,,--=j i f j i f j i g ,显然i 不变时,[]j i g ,随着j 的增大而呈单调递增(如果[][]1,,-

[]{}1,|m in +>=i W j i g j left ,[]{}1,|m ax +≤=i C j i f j right ;⑵删除[]1+right g ,将

[]1+left g ,[]2+left g ,…,[]right g 的值向后平移到[]2+left g ,[]3+left g ,…,

[]1+right g ,并将[]1+left g 的值修改为1+i W 。

时间复杂度:

用一棵平衡二叉树维护[]i g ,则从[]i g 递推[]1+i g 的时间复杂度为()N O log ,

所以总时间复杂度为:排序()N N O log +[]i g 的维护()()N O N O log ?=()N N O log 。

该算法要用到平衡二叉树,编程复杂度较大。其实仔细分析算法1,并加以改进,就可以得到一个贪心的算法。

算法2:

维护一个按i i C W +排序的有序表,初始为空。将所有区间按长度i W 从小到大排序,依次处理。处理某个区间时,若它能够放入有序表,则选择该区间并放入表中,否则不选择。最后的表即是要求的状态。

实现:

算法的瓶颈在有序表的维护上。如果直接模拟该表的所有操作,时间复杂度是()2N O 。用线段树来维护该表,可以在()N O log 的时间里完成每个区间的取舍及插入操作(这些操作并不是非常容易实现,但与论文主题无关,这里不再细写)。因此,总时间复杂度为()N N O log 。

例题3.2:Europe - Southeastern 2007 Problem D 题目大意:

一家银行收到了()100000≤≤N N 个贷款申请,每个贷款都最晚要在

()100000≤≤i i d d 时完成,利润为i p 。每个贷款需要一个单位时间处理,银行在

同一时间内最多可以接受()1000≤≤L L 个贷款。求如何安排才能获得最大利润。

分析:

将每个贷款申请看作一个单位长度、位置可变且带权的区间,则题目转化为选出一些区间,将它们不互相重叠地放在L 个资源),0[+∞上,使利润最大,且区

间的左端点不得超过i d 。可以用与例题3.1算法2类似的贪心算法解决该问题。

算法:

将这些区间按照权值从大到小排序,顺序处理每个区间。设{}i N

i d D ≤≤=1max 。

由于区间都是单位长度的,我们可以用一维数组[]()D i i s ≤≤1来记录当前的情况,表示()1,+i i 被覆盖次数,根据题意有[]L i s ≤≤0。处理第i 个区间时,若可以选择该区间(即[]L i s d i i <≤≤?,0),则将该区间放置到一个i 最大的一个位置,即

[]{}L i s i i

d i <≤≤|max 0,否则就不选择该区间。

处理每个区间时,若直接模拟,时间复杂度是()ND O ,最好还是做适当优化。

优化1:

若用一棵线段树来维护数组[]i s ,可以在()D O log 的时间里处理每个区间。总时间复杂度为:排序()N N O log +处理每个区间()()D O N O log ?=()()ND N O log 。

优化2:

每次[]()0>i i s 的值增加后,若[]L i s =,则将之所属集合与前面的[]1-i s 所属集合合并成一个新集合。处理第i 个区间时,它选择的位置必是[]i d s 所在集合中的最前面的元素,(若最前面的元素是[]0s 且[]L s =0,则表示该区间不能被选择)。如果我们用并查集来实现集合的各种操作,维护它的时间复杂度可近似地看作

()D N O +。总时间复杂度:排序()N N O log +处理每个区间()D N O +=()N N D O log +。

第1种优化由于用到了线段树,不论在空间上还是在时间上都有着巨大的系

数;而第2种优化用到的空间非常小,且在时间效率和编程复杂度两方面都比第1种好很多。

有n 个区间,选择尽量少的区间,使得这些区间完全覆盖某线段[]t s ,。

算法:

将所有区间按左端点坐标从小到大排序,顺序处理每个区间。每次选择覆盖点s 的区间中右端点坐标最大的一个,并将s 更新为该区间的右端点坐标,直到选择的区间已包含t 。

证明:

显然,该算法最后选出来的区间完全覆盖[]t s ,,下面证明所选出区间的数量是最少的。设i f 为该算法所接受的第i 个区间的右端点坐标,i g 为某最优解中第

i 个区间的右端点坐标。

命题 4.1 当1≥i 时:该算法所接受的第i 个区间的右端点坐标i f ≥某最优解中的第i 个区间的右端点坐标i g 。

该命题可以运用数学归纳法来证明。对于1=i ,命题显然为真,因为算法第一个选择的区间是能覆盖点s 的区间中右端点坐标最大的那个。令1>i ,假定论断对1-i 为真,即11--≥i i g f ,最优解中选的第i 个区间的右端点坐标为i g ,设它的左端点坐标为i b 。由于该区间覆盖1-i g ,即i i i g g b ≤≤-1。当1-≤i i f g 时,由于

i i f f ≤-1,有i i f g ≤;当1->i i f g 时,有i i i i g f g b <≤≤--11,此时最优解所选择的区

间覆盖点1-i f ,又算法选择的第i 个区间是右端点坐标最大的那个,故i i g f ≥。证毕。

设该算法选出了k 个区间,而最优解选出了m 个区间。

命题4.2 最优解选出的区间数量m =该算法选出的区间数量k 。

假设k m <,根据命题 4.1,有m m g f ≥。根据该算法,t f g m m <≤,因此该最优解不可能覆盖t ,产生矛盾。所以k m ≥,又因为m 是最优解中选出区间个数,所以k m =。

综上所述,算法选出的区间是最优解。

实现:

选择区间可以通过线性扫描来实现。时间复杂度:排序()n n O log +扫描

()n O =()n n O log 。

例题4:ACM/ICPC Regional Warm-up Contest 2002 Problem E 题目大意:

有一块草坪,长为l ,宽为w ,在它的中心线的位置处装有()10000≤n n 个点状的喷水装置。每个喷水装置i 喷水的效果是以它为中心半径为i r 的圆都被润湿。请选择尽量少的喷水装置,把整个草坪全部润湿。如图所示:

分析:

显然覆盖整个草坪的充要条件是要能覆盖上边界。将每个喷水设置能覆盖的一段上边界看成一个区间,转化后的问题就是原问题。

若区间带权,如何解决调度、覆盖一类问题呢?这时,刚才一直用的贪心算法已经不再普遍适用,大部分情况下,只能用更一般性的方法——动态规划。

例题5.1:Europe - Northeastern Europe 2004 Problem J 题目大意:

有()1000≤N N 只可爱的小海龟在赛跑。询问每只小海龟它是第几名,它会回答你两个数:i i b a ,,分别表示在它前面的小海龟数和在它后面的小海龟数。接着你发现其中有些小海龟对你撒了谎,因为根据他们的说法你根本没法给他们排队!但是你是善良的,你不希望有很多小海龟在撒谎,想找出最少有哪几只小海龟在撒谎。(注意:小海龟的名次可能是并列的!)

分析:

若一只海龟说了真话,那么该海龟的位置一定是在区间[]i i b N a -+,1上。若有K 只海龟选择了相同的区间[]i i b N a -+,1,则根据并列关系,该区间最多能同时拥有{}K b a N i i ,m in --只海龟。可以计算出每个区间最多能有多少只海龟,把数值看做区间的“权”。则问题转化为,在一些带权区间中,选出权和最大的区间,使它们之间不能互相重叠。

算法:

算出每个出现过的区间的“权”[]i v ,接下来的算法就是动态规划了。先按

右端点坐标从小到大排序,令[]i p 为在区间i 左边的且与之无公共点的最大区间编号,设状态[]i f 为在前i 个区间中可选出区间的最大权和,则状态转移方程为

[][][][][]{}i v i p f i f i f +-=,1m ax ,说真话海龟的最大数量就是最后一个区间的f

值。

实现:

由于上述所有操作的排序关键字都在N ,...,1,0中,所以可以使用时间复杂度为()N O 的基数排序,其它各操作也均能在()N O 时间内完成(具体细节留给读者思考)。所以,总时间复杂度为()N O 。

例题5.2:USACO 2005 dec silver 题目大意:

仓库从第M 秒到第E 秒的任意时刻都需要有人打扫,包括M 和E ,

863990≤≤≤E M 。有()1

00001≤≤N N 个工人前来应聘打扫仓库的工作,每人给

出自己可以工作的时间段:从第1T 秒到第2T 秒(包括第1T 秒和第2T 秒),需要支付工资S 元。E T T M ≤≤≤21,5000000≤≤S 。

每个应聘者,你能够录用或者不录用,但不能只雇佣他提出的一部分时间。一旦录用,你就得支付他提出的S 元给他。现在要保证从M 秒到第E 秒的任意时刻都得有人打扫,问最少要付多少工资。

分析:

将每个人的打扫时间看作一个左右端点分别为i T 1和i T 2,且权为i S 区间。则问题转化为:选出一些区间,使它们覆盖[]E M ,上的所有整数点,求权和最小值。

算法:

这道题很容易想到一个()2N O 的动态规划算法。将所有区间按右端点坐标从小到大排序,顺序处理每个区间。用[]i f 表示在前i 个区间中选择,且第i 个区间必须选时,覆盖[]i T M 2,的权和最小值。

则状态转移方程为:[]{}[][]

?

??∈?+≥+=<≤i i i i i i i j i

j T T M if S T T M if S T T j f Min i f 2,12,1112|][1,

最后的结果就是{}]2,1[|][1i i N

i T T E i f Min ∈≤≤。

第一种优化:

对于这个状态转移方程,很容易想到用线段树优化的方法。建立一棵范围是

[]E M ,的线段树,叶子节点是一个个整点坐标。每得到一个[]i f 的值,就将它插

入在i T 2处,并更新最小值。计算[]i f 的值时只要选取区间[]12,11--i i T T 中f 的最小值进行状态转移即可。算法时间复杂度为:排序()N N O log +维护线段树

()()()M E O N O -?log =()()M E N O -log ,故总时间复杂度是()()()M E N N O -log 。

这样做编程复杂度较高,且时间效率亦不是很好(虽然可以通过离散化稍微降低一点时间复杂度,但仍然系数巨大)。仔细分析,可以找到更好的优化方法。

第二种优化:

建立一个栈stack ,[]i stack 表示处在栈中第i 个位置的区间。假设栈中已经有k 个区间,保持栈中区间f 值的单调性:[][][][]j stack f i stack f k j i <≤<≤?,1。每次要将第i 个区间压入栈中时,做这样的操作:

计算[]i f 的值时,可以借助栈找到一个区间j ,使i j T T 112≥+且[]j f 最小,进行状态转移。根据栈中元素的单调性,这里可以用二分查找。由于一共N 个区间,每个区间进栈、出栈最多一次,故栈的维护的时间复杂度为()N O 。在任何时间内,栈内区间个数不超过N ,故一次二分查找复杂度为()N O log 。综上所述,该方法的总时间复杂度为()()())log (log N N O N O N O N O =?+。

由于栈、二分查找的系数比线段树小很多,且栈内区间个数很少有达到N 的情况,故这种优化比前面的要好很多。

第三种优化:

以左端点为关键字从小到大排序,按顺序依次处理每个区间。维护一个以

[]i f 为关键字的优先队列。处理区间i 时,只要最小关键字区间的右端点坐标小

于11-i T ,就删除。重复上述操作,直到当前区间能和最小关键字区间进行状态转移。状态转移后,将区间i 插入优先队列。

由于每个区间最多只进出队列一次,故一共要进行()N O 次插入操作和()N O 次删除操作。用二叉堆实现该优先队列,插入和删除操作的时间复杂度都是

()N O log ,因此总时间复杂度为:排序()N N O log +动态规划()N O +维护二叉堆()()N O N O log ?=()N N O log 。

该优化时间复杂度的系数介于前两种优化之间,然而对于实现而言,使用Pascal 的编程量和用第一种优化差不多,而使用C/C++就可以大大减少编程量。

有n 个区间,m 个点。若某区间包含了某点,则构成一对匹配关系。选出最

国家集训队2004论文集 肖天

“分层图思想”及其在信息学竞赛中的应用 天津市南开中学肖天 【摘要】本文通过对几道信息学竞赛题的解决,提出了一种解决问题的建模思想——分层图思想。该思想通过挖掘问题性质,将原问题抽象得出的图复 制为若干层并连接形成更大的图,使本来难以用数学语言表达得图论模 型变得简明严谨,为进一步解决问题打下了良好的基础。 【关键字】分层图思想图论数学模型最短路信息学竞赛 【正文】 1 引论 人们在借助计算机解决一个实际问题时,无非就是详细地告诉计算机应该怎么做,使它能通过人们给定的输入得到人们想要的输出。由于一般的计算机只能处理数字信号,所以只有把实际问题转化为数学问题,计算机才能帮助我们。这一步就是建立数学模型。 数学模型的建立在通过计算机解决问题的过程中非常重要。它把计算机无法理解的问题加以转化,使一切事物量化,最终变为只含数学过程的问题。它是人脑与计算机沟通的桥梁。不仅如此,数学模型的好坏直接影响着人与计算机之间的信息交流,影响着计算机对问题的“理解”。好的数学模型能够抓住问题的本质,表述简捷明了,易于人们找到有效的解决方法,并通过编制程序的方式将解决方法告诉计算机;相反,对于同一个问题,如果数学模型不能抓住问题本质,人们就可能无法解决问题,或者找不到有效的方法,更不用提告诉计算机如何做了。 由于建立数学模型是为了解决问题,所以人们在做这项工作时往往希望把问题归结为已经很好解决的经典问题或若干这样问题的有机结合。这样,只要应用前人的研究成果就可以了。比如,排序、求图的单源最短路、网络流等等都是经典问题,前人不仅给出一般解法,而且对各种特殊情况和变形作了深入的研究。但事情并不总像人们希望的那样,有的问题即使可以归结为已有问题,在其中加入一些干扰因素后,原有性质就会发生改变,原来建立起的数学模型难以再用严谨的数学语言表达。这样问题中的部分图论问题可以用本文提出的“分层图思想”解决。 该思想注重对原问题性质的挖掘,通过对原问题数学模型的扩展,将干扰因素融入新的数学模型之中,恢复了模型的严谨性,进而与已解决问题产生联系,得到有效算法。

2008年全国青少年信息学奥林匹克竞赛获奖名单

2008年全国青少年信息学奥林匹克竞赛获奖名单 一等奖 姓名学校姓名学校 曹钦翔上海中学梅诗珂合肥一中 高逸涵清华附中张昆玮山西省实验中学贾志豪石家庄二中李骥扬石家庄二中 罗穗骞华南师大附中董华星绍兴一中 漆子超长沙雅礼中学汤可因福州八中 姜碧野中山纪念中学刘聪山东青岛二中 方展鹏中山一中金斌江苏省常州高级中学毛杰明南京外国语学校周而进绍兴一中 徐持衡温州中学骆可强成都七中 武森石家庄二中徐源盛长沙市一中 二等奖 姓名学校姓名学校 罗韬威长沙长郡中学吕潇山东师大附中 覃亮柳州高级中学李博闻东北师大附中 林舒福州三中何思博中山一中 赖陆航杭州二中刘思壮唐山一中 唐浩师大附中商静波绍兴一中 李尔坦蚌埠二中马文萱成都七中 邹逊蚌埠九中冀崇恩山大附中 陈键飞山东师大附中隋清宇天津耀华中学 严枭华东师大二附中张超哈尔滨市第三中学谭睿巴蜀中学胡正一南昌第二中学 杨晶江苏省常州高级中学杜江帆山东寿光现代中学潘宇超绍兴一中孙征杭州二中 寿鹤鸣合肥一中刘鹰长沙雅礼中学 李恺威杭州学军中学崔万云河南师大附中分校刘骏重庆一中周小博华东师大二附中黄相如武钢三中王寿临高中学 张晓然丹东四中 三等奖 姓名学校姓名学校

强瑞鑫山西省实验中学何博硕人大附中 韩文轩香港培正中学杜若飞大庆市第一中学刘艺成大庆市实验中学李聪重庆八中 吴沛凡江苏省常州高级中学陈凤娇八一中学 吕伟聪南京外国语学校钟晓辉海南侨中 蒋立绍兴一中何新骥成都大湾中学 杨欢天津南开中学孙天佑哈尔滨市第三中学沙渺吉林省实验中学张程山东师大附中 韦人柳州高级中学邵林博杭州学军中学 李欣彤成都七中曹瑞晴上海中学 李博放绵阳南山中学王亚盛兰州一中 何洋常州一中王華溪濠江中学 王东生东北育才学校史沛郑州101中学 陈曦仑吉林一中张瀚天人大附中 谢怡然北江中学陈柏熙香港培正中学 朱虹宇福州一中贾骏超西安市高新一中陈宇澄成都七中张嘉然石家庄二中 喻展芜湖安师大附中王仪康重庆一中 陈庆鹏新余市第四中学江沄柳州高级中学 代明昊华南师大附中王士玮海南中学 杨睿武钢三中邱堃武汉二中 张蕾长沙长郡中学白彦博西安市第八十三中学李佩谦东北师大附中罗维汉香港培正中学 王一帆人大附中周绪刚华中师大附中 赵灿辉天津耀华中学

NOI国家集训队论文分类(至2008)(摘抄自C博客)

摘抄自C博客 组合数学 计数与统计 2001 - 符文杰:《Pólya原理及其应用》 2003 - 许智磊:《浅谈补集转化思想在统计问题中的应用》 2007 - 周冬:《生成树的计数及其应用》 2008 - 陈瑜希《Pólya计数法的应用》 数位问题 2009 - 高逸涵《数位计数问题解法研究》 2009 - 刘聪《浅谈数位类统计问题》 动态统计 2004 - 薛矛:《解决动态统计问题的两把利刃》 2007 - 余江伟:《如何解决动态统计问题》 博弈 2002 - 张一飞:《由感性认识到理性认识——透析一类搏弈游戏的解答过程》2007 - 王晓珂:《解析一类组合游戏》 2009 - 曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问题》 2009 - 方展鹏《浅谈如何解决不平等博弈问题》 2009 - 贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》 母函数 2009 - 毛杰明《母函数的性质及应用》 拟阵 2007 - 刘雨辰:《对拟阵的初步研究》 线性规划 2007 - 李宇骞:《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》 置换群 2005 - 潘震皓:《置换群快速幂运算研究与探讨》 问答交互 2003 - 高正宇:《答案只有一个——浅谈问答式交互问题》 猜数问题 2003 - 张宁:《猜数问题的研究:<聪明的学生>一题的推广》

2006 - 龙凡:《一类猜数问题的研究》 数据结构 数据结构 2005 - 何林:《数据关系的简化》 2006 - 朱晨光:《基本数据结构在信息学竞赛中的应用》 2007 - 何森:《浅谈数据的合理组织》 2008 - 曹钦翔《数据结构的提炼与压缩》 结构联合 2001 - 高寒蕊:《从圆桌问题谈数据结构的综合运用》 2005 - 黄刚:《数据结构的联合》 块状链表 2005 - 蒋炎岩:《数据结构的联合——块状链表》 2008 - 苏煜《对块状链表的一点研究》 动态树 2006 - 陈首元:《维护森林连通性——动态树》 2007 - 袁昕颢:《动态树及其应用》 左偏树 2005 - 黄源河:《左偏树的特点及其应用》 跳表 2005 - 魏冉:《让算法的效率“跳起来”!——浅谈“跳跃表”的相关操作及其应用》 2009 - 李骥扬《线段跳表——跳表的一个拓展》 SBT 2007 - 陈启峰:《Size Balance Tree》 线段树 2004 - 林涛:《线段树的应用》 单调队列 2006 - 汤泽:《浅析队列在一类单调性问题中的应用》 哈希表 2005 - 李羽修:《Hash函数的设计优化》 2007 - 杨弋:《Hash在信息学竞赛中的一类应用》 Splay 2004 - 杨思雨:《伸展树的基本操作与应用》

信息学奥赛NOIP初赛复习知识点

信息学奥赛NOIP初赛复习知识点 1、计算机相关科学家: A:被西方人誉为“计算机之父”的美籍匈牙利科学家、数学家冯·诺依曼于1945年发表了一个 全新的"存储程序通用电子计算机方案"—EDVAC。EDVAC方案提出了著名的“ 冯·诺依曼体系结构”理论:(1)采用二进制形式表示数据和指令(2)采用存储程序方式(3)由运算器、存储器、控制器、输 入设备和输出设备五大部件组成计算机系统 B:“图灵机”与“冯·诺伊曼机”齐名,被永远载入计算机的发展史中。1950年10月,图灵又发表了另 一篇题为“机器能思考吗”的论文,成为划时代之作。也正是这篇文章,为图灵赢得了“人工智能之父”的桂冠。与计算机有关的最高奖项“图灵奖”。 2、与竞赛有关的知识: A:信息学奥赛相关的软件有:anjuta 1.2.2版; Red Hat 9.0 自带了gcc/g++ 3.2.2版; Lazarus 0.9.10版;free pascal编译器 2.0.1版; gdb 6.3版;RHIDE;(turbo pascal淘汰) 3、与计算机系统相关的知识: A:常见的操作系统有:DOS、WIN32、WIN95、WIN98、WIN2000、WINXP、WIN2003、WIN2007、LINUX、VISTA 4、与计算机软件相关的知识:无 5、与计算机硬件相关的知识: A:断电后能保存信息的有:ROM(只读存储器)、硬盘、软盘、光盘、U盘、MP3、MP4等;不能保存的主要是RAM(读写存储器)。 B:CPU又名中央处理器,它可以拆分成运算器、控制器 6、病毒及防火墙: A:防火墙的作用是防止黑客攻击。 7、与编程语言相关的知识: A:1972年PARC发布了Smalltalk的第一个版本。大约在此时,“面向对象”这一术语正式确定。Smalltalk被认为是第一个真正面向对象的语言 B:第一代语言:机器语言(0101001);第二代语言:20世纪50年代,汇编语言,第三代语言:高级语言、算法语言,如BASIC,FORTRAN,COBOL,PASCAL,C;高级语言的特点是可读性强,编 程方便;第四代语言:非过程化语言;SQL;第五代语言:智能性语言,PROLOG(代表);还有:LISP,APL,SNOBOL,SIMULA。

国家集训队2001论文集 毛子青

动态规划算法的优化技巧 福州第三中学毛子青 [关键词] 动态规划、时间复杂度、优化、状态 [摘要] 动态规划是信息学竞赛中一种常用的程序设计方法,本文着重讨论了运用动态规划思想解题时时间效率的优化。全文分为四个部分,首先讨论了动态规划时间效率优化的可行性和必要性,接着给出了动态规划时间复杂度的决定因素,然后分别阐述了对各个决定因素的优化方法,最后总结全文。 [正文] 一、引言 动态规划是一种重要的程序设计方法,在信息学竞赛中具有广泛的应用。 使用动态规划方法解题,对于不少问题具有空间耗费大、时间效率高的特点,因此人们在研究动态规划解题时更多的注意空间复杂度的优化,运用各种技巧将空间需求控制在软硬件可以承受的范围之内。但是,也有一部分问题在使用动态规划思想解题时,时间效率并不能满足要求,而且算法仍然存在优化的余地,这时,就需要考虑时间效率的优化。 本文讨论的是在确定使用动态规划思想解题的情况下,对原有的动态规划解法的优化,以求降低算法的时间复杂度,使其能够适用于更大的规模。 二、动态规划时间复杂度的分析 使用动态规划方法解题,对于不少问题之所以具有较高的时间效率,关键在于它减少了“冗余”。所谓“冗余”,就是指不必要的计算或重复计算部分,算法的冗余程度是决定算法效率的关键。动态规划在将问题规模不断缩小的同时,记录已经求解过的子问题的解,充分利用求解结果,避免了反复求解同一子问题的现象,从而减少了冗余。 但是,动态规划求解问题时,仍然存在冗余。它主要包括:求解无用的子问题,对结果无意义的引用等等。 下面给出动态规划时间复杂度的决定因素: 时间复杂度=状态总数*每个状态转移的状态数*每次状态转移的时间[1] 下文就将分别讨论对这三个因素的优化。这里需要指出的是:这三者之间不是相互独立的,而是相互联系,矛盾而统一的。有时,实现了某个因素的优化,另外两个因素也随之得到了优化;有时,实现某个因素的优化却要以增大另一因素为代价。因此,这就要求我们在优化时,坚持“全局观”,实现三者的平衡。 三、动态规划时间效率的优化 3.1 减少状态总数 我们知道,动态规划的求解过程实际上就是计算所有状态值的过程,因此状态的规模直接影响到算法的时间效率。所以,减少状态总数是动态规划优化的重要部分,本节将讨论减少状态总数的一些方法。

第二十届全国青少年信息学奥林匹克竞赛初赛提高组C语言试题(附答案)

第二十届全国青少年信息学奥林匹克竞赛初赛 提高组C语言试题 一、单项选择题(每题1.5分,共22.5分)。 1. 以下哪个是面向对象的高级语言( ). A. 汇编语言 B. C++ C. FORTRAN D. Basic 2. 1TB代表的字节数量是( ). A. 2的10次方 B. 2的20次方 C. 2的30次方 D. 2的40次方 3. 二进制数00100100和00010101的和是( ). A. 00101000 B. 001010100 C. 01000101 D. 00111001 4. TCP协议属于哪一层协议( ). A. 应用层 B. 传输层 C. 网络层 D. 数据链路层 5. 下列几个32位IP地址中,书写错误的是( ). A. 162.105.128.27 B. 192.168.0.1 C. 256.256.129.1 D. 10.0.0.1 6. 在无向图中,所有定点的度数之和是边数的( )倍. A. 0.5 B. 1 C. 2 D. 4 7. 对长度位n的有序单链表,若检索每个元素的概率相等,则顺序检索到表中任一元素的平均检索长度为( ). A. n/2 B. (n+1)/2 C. (n-1)/2 D. n/4 8. 编译器的主要功能是( ). A. 将一种高级语言翻译成另一种高级语言 B. 将源程序翻译成指令 C. 将低级语言翻译成高级语言 D. 将源程序重新组合 9. 二进制数111.101所对应的十进制数是( ). A. 5.625 B. 5.5 C. 6.125 D. 7.625 10. 若有变量int a, float x, y, 且a=7, x=2.5, y=4.7, 则表达式x+a%3*(int)(x+y)%2/4的值大约是( ). A. 2.500000 B. 2.750000 C. 3.500000 D. 0.000000 11. 有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个续结点。 struct node { data next data next data next int data; struct node *next; ↑p ↑q ↑r } *p,*q,*r; 现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下程序段中错误的是( ). A. q->next = r->next; p-> next = r; r->next = q; B. p->next = r; q->next = r->next; r->next = q; C. q->next = r->next; r->next = q; p->next = r; D. r->next = q; q->next = r->next; p->next = r; 12. 同时查找2n 个数中的最大值和最小值,最少比较次数为( ). A. 3(n-2)/2 B. 4n-2 C. 3n-2 D. 2n-2 13. 设G是有6个结点的完全图,要得到一颗生成树,需要从G中删去( )条边.

国家集训队2005论文集 黄源河

左偏树的特点及其应用 广东省中山市第一中学黄源河 【摘要】 本文较详细地介绍了左偏树的特点以及它的各种操作。 第一部分提出可并堆的概念,指出二叉堆的不足,并引出左偏树。第二部分主要介绍了左偏树的定义和性质。第三部分详细地介绍了左偏树的各种操作,并给出时间复杂度分析。第四部分通过一道例题,说明左偏树在当今信息学竞赛中的应用。第五部分对各种可并堆作了一番比较。最后总结出左偏树的特点以及应用前景。 【关键字】左偏树可并堆优先队列 【目录】 一、引言 (2) 二、左偏树的定义和性质 (2) 2.1 优先队列,可并堆 (2) 2.1.1 优先队列的定义 (2) 2.1.2 可并堆的定义 (2) 2.2 左偏树的定义 (3) 2.3 左偏树的性质 (4) 三、左偏树的操作 (5) 3.1 左偏树的合并 (5) 3.2 插入新节点 (7) 3.3 删除最小节点 (8) 3.4 左偏树的构建 (8) 3.5 删除任意已知节点 (9) 3.6 小结 (12) 四、左偏树的应用 (13) 4.1 例——数字序列(Baltic 2004) (13) 五、左偏树与各种可并堆的比较 (15) 5.1 左偏树的变种——斜堆 (15) 5.2 左偏树与二叉堆的比较 (16) 5.3 左偏树与其他可并堆的比较 (16) 六、总结 (18)

【正文】 一、引言 优先队列在信息学竞赛中十分常见,在统计问题、最值问题、模拟问题和贪心问题等等类型的题目中,优先队列都有着广泛的应用。二叉堆是一种常用的优先队列,它编程简单,效率高,但如果问题需要对两个优先队列进行合并,二叉堆的效率就无法令人满意了。本文介绍的左偏树,可以很好地解决这类问题。 二、左偏树的定义和性质 在介绍左偏树之前,我们先来明确一下优先队列和可并堆的概念。 2.1优先队列,可并堆 2.1.1优先队列的定义 优先队列(Priority Queue)是一种抽象数据类型(ADT),它是一种容器,里面有一些元素,这些元素也称为队列中的节点(node)。优先队列的节点至少要包含一种性质:有序性,也就是说任意两个节点可以比较大小。为了具体起见我们假设这些节点中都包含一个键值(key),节点的大小通过比较它们的键值而定。优先队列有三个基本的操作:插入节点(Insert),取得最小节点(Minimum) 和删除最小节点(Delete-Min)。 2.1.2可并堆的定义 可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum, Delete-Min),还支持一个额外的操作——合并操作: H ← Merge(H1,H2) Merge( ) 构造并返回一个包含H1和H2所有元素的新堆H。 前面已经说过,如果我们不需要合并操作,则二叉堆是理想的选择。可惜合并二叉堆的时间复杂度为O(n),用它来实现可并堆,则合并操作必然成为算法的瓶颈。左偏树(Leftist Tree)、二项堆(Binomial Heap) 和Fibonacci堆(Fibonacci Heap) 都是十分优秀的可并堆。本文讨论的是左偏树,在后面我们将看到各种可并堆的比较。

【名师推荐】全国第二十二届青少年信息学奥林匹克竞赛分区联赛初赛试题

全国第二十二届青少年信息学奥林匹克竞赛分区联赛 初赛试题 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项) 1. 以下不是微软公司出品的软件是()。 A.Powerpoint B.Word C.EPcel D.AcrobatReader 查看 2. 如果256种颜色用二进制编码来表示,至少需要()位。 A.6 B.7 C.8 D.9 查看 3. 以下不属于无线通信技术的是()。 A.蓝牙 B.WiFi C.GPRS D.以太网 查看 4. 以下不是CPU生产厂商的是()。 A.Intel B.AMD C.Microsoft D.IBM 查看 5. 以下不是存储设备的是()。 A.光盘 B.磁盘 C.固态硬盘

D.鼠标 查看 6. 如果开始时计算机处于小写输入状态现在有一只小老鼠反复按照CapsLock、字母键A、字母键S和字母键D的顺序循环按键即CapsLock、A、S、D、CapsLock、A、S、D、……屏幕上输出的第81个字符是字母()。 A.A B.S C.D D.a 查看 7. 二进制数00101100和00010101的和是()。 A.00101000 B.01000001 C.01000100 D.00111000 查看 8. 与二进制小数0.1相等的八进制数是()。 A.0.8 B.0.4 C.0.2 D.0.1 查看 9. 以下是32位机器和64位机器的区别的是()。 A.显示器不同 B.硬盘大小不同 C.寻址空间不同 D.输入法不同 查看 10. 以下关于字符串的判定语句中正确的是()。 A.字符串是一种特殊的线性表 B.串的长度必须大于零 C.字符串不可以用数组来表示

NOIP 2017全国青少年信息学奥林匹克联赛提高组初赛试题答案

NOIP 2017全国青少年信息学奥林匹克联赛提高组初赛试题答案 ? 一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分;每题有且仅有一个正确选项)? 1. 从( )年开始,NOIP 竞赛将不再支持 Pascal 语言。 A. 2020 B. 2021 C. 2022 D. 2023 ? 2.在 8 位二进制补码中,10101011 表示的数是十进制下的( )。 A. 43 B. -85 C. -43 D.-84 ? 3.分辨率为 1600x900、16 位色的位图,存储图像信息所需的空间为( )。 A. 2812.5KB B. 4218.75KB C. 4320KB D. 2880KB ? 4. 2017年10月1日是星期日,1949年10月1日是( )。 A. 星期三 B. 星期日 C. 星期六 D. 星期二 ? 5. 设 G 是有 n 个结点、m 条边(n ≤m)的连通图,必须删去 G 的( )条边,才能使得 G 变成一棵树。 A.m–n+1 B. m-n C. m+n+1 D.n–m+1 ? 6. 若某算法的计算时间表示为递推关系式: T(N)=2T(N/2)+NlogN T(1)=1 则该算法的时间复杂度为( )。 A.O(N) B.O(NlogN) C.O(N log2N) D.O(N2) ? 7. 表达式a * (b + c) * d的后缀形式是()。 A. abcd*+* B. abc+*d* C. a*bc+*d D. b+c*a*d

? 8. 由四个不同的点构成的简单无向连通图的个数是( )。 A. 32 B. 35 C. 38 D. 41 ? 9. 将7个名额分给4个不同的班级,允许有的班级没有名额,有( )种不同的分配方案。 A. 60 B. 84 C. 96 D.120 ? 10. 若f[0]=0, f[1]=1, f[n+1]=(f[n]+f[n-1])/2,则随着i的增大,f[i]将接近与( )。 A. 1/2 B. 2/3 D. 1 ? 11. 设A和B是两个长为n的有序数组,现在需要将A和B合并成一个排好序的数组,请问任何以元素比较作为基本运算的归并算法最坏情况下至少要做( )次比较。 A. n2 B. nlogn C. 2n D.2n-1 ? 12. 在n(n>=3)枚硬币中有一枚质量不合格的硬币(质量过轻或质量过重),如果只有一架天平可以用来称重且称重的硬币数没有限制,下面是找出这枚不合格的硬币的算法。请把 a-c三行代码补全到算法中。 a. A XUY b. A Z c. n |A| 算法Coin(A,n) 1. k n/3 2. 将A中硬币分成X,Y,Z三个集合,使得|X|=|Y|=k, |Z|=n-2k 3. if W(X)≠W(Y) //W(X), W(Y)分别为X或Y的重量 4. then_______ 5. else_______ 6. __________ 7. if n>2 then goto 1 8. if n=2 then 任取A中1枚硬币与拿走硬币比较,若不等,则它不合格;若相等,则A 中剩下的硬币不合格 9. if n=1 then A中硬币不合格 正确的填空顺序是( )。 A. b,c,a B. c,b,a C. c,a,b D.a,b,c ?

历年国家集训队论文题目

1999年 陈宏- 数据结构的选择与算法效率——从IOI98试题PICTURE谈起 来煜坤- 把握本质,灵活运用——动态规划的深入探讨 齐鑫- 搜索方法中的剪枝优化 邵铮- 数学模型的建立、比较和应用 石润婷- 隐蔽化、多维化、开放化──论当今信息学竞赛中数学建模的灵活性睢》?- 准确性、全面性、美观性——测试数据设计中的三要素 周咏基- 论随机化算法的原理与设计 2000年 陈彧- 信息学竞赛中的思维方法 方奇- 动态规划 高寒蕊- 递推关系的建立及在信息学竞赛中的应用 郭一- 数学模型及其在信息学竞赛中的应用 江鹏- 探索构造法解题模式 李刚- 动态规划的深入讨论 龙翀- 解决空间规模问题的几种常用的存储结构 骆骥- 数学模型的建立和选择 施遥- 人工智能在围棋程序中的应用 肖洲- 数据结构的在程序设计中的应用 谢婧- 规模化问题的解题策略 徐串- 论程序的调试技巧 徐静- 图论模型的建立与转化 杨江明- 论数学策略在信息学问题中的应用 杨培- 非最优化算法初探 张辰- 动态规划的特点及其应用 张力- 类比思想在解题中的应用 张一飞- 冗繁削尽留清瘦——浅谈信息的充分利用 2001年 高寒蕊- 从圆桌问题谈数据结构的综合运用 符文杰- Pólya原理及其应用 高岳- 中等硬度解题报告 江鹏- 从一道题目的解法试谈网络流的构造与算法 刘汝佳- 搬运工问题的启示 李益明- 计算几何的相关问题 李源- 树的枚举 骆骥- 由“汽车问题”浅谈深度搜索的一个方面——搜索对象与策略的重要性毛子青- 动态规划算法的优化技巧 俞玮- 基本动态规划问题的扩展 张一飞- 求N!的高精度算法 2002年 戴德承- 退一步海阔天空——“目标转化思想”的若干应用

2016年嘉兴市青少年信息学(计算机)竞赛(小学组)试卷

2016年嘉兴市青少年信息学(计算机)竞赛(小学组)试卷 (90分钟内完成第五大题请注意选做相应模块) ●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●● 一、单项选择题(共20题,每题2分,共计40分。每题有且仅有一个正确答案。) 1.二进制是计算技术中广泛采用的一种数制,进位规则是“逢二进一”。已知十进制数5所对应的二进制数是101,那么十进制数6所对应的二进制数为(▲ )。 A.1011B.110C.100D.102 2.通常,计算机由运算器、控制器、存储器、输入设备和输出设备等五个逻辑部件组成。请问下列设备中属于输出设备 ....的是(▲ )。 ①手写笔②蓝牙耳机③投影仪④扫描仪⑤打印机 A.②③⑤B.①③④C.②③④⑤D.①②③④ 3.在WIN7中,使用“开始菜单”打开PowerPoint 2010软件,正确的步骤是(▲ )。 ①单击“Microsoft Office”②单击“PowerPoint 2010” ③单击“开始按钮” ④单击“所有程序” A.④③②①B.③④①②C.③②④①D.①②③④ 4.某同学新购入计算机一台,它的主要硬件配置如下:Intel 酷睿i7 4790K /金士顿骇客神条8GB DDR3 1600/华硕圣骑士R9 290X-DC2OC-4GD5/三星SSD 850 EVO(500GB),请问上述配置中提到的Intel 酷睿i7 4790K和三星SSD 850 EVO(500GB)分别是(▲)。 A.CPU,硬盘B.CPU,内存C.硬盘,内存D.硬盘,U盘5.Word 2010中可以插入图片、剪贴画等图形对象,当插入图片后,如右图, 图片上方的绿圆点可以使图片(▲ )。 A.扩大B.缩小C.翻转D.旋转 6.计算机软件总体分为系统软件与应用软件两大类,以下几款软件中属于应用软件 ....分类的有(▲ )。 ① Android(安卓)②金山画王③ Windows 7 ④美图秀秀⑤ ACDSee A.①③⑤B.②④⑤C.②③⑤D.①②④ 7.某同学在网易免费邮网站(https://www.360docs.net/doc/f815252817.html,)申请了一个电子邮箱,他的邮箱地址有可能是(▲ )。 A.qbcde123@163com B.https://www.360docs.net/doc/f815252817.html, C.qbcde123@https://www.360docs.net/doc/f815252817.html, D.qbcde123.163@com 8.在ACDSee 9编辑任务工具栏中,下列图标的名称为(▲ )。 A.裁剪、曝光、调整大小、打印B.曝光、裁剪、调整大小、打印 C.曝光、裁剪、打印、调整大小D.调整大小、裁剪、曝光、打印 9.在Word 2010中,工具栏上可以(▲ )。 A.在文字上加个上标B.增大字体 C.缩小字体D.在文字上加个下标

信息学奥赛初赛试题(第十六届)

第十六届全国青少年信息学奥林匹克联赛初赛试题(提高组 Pascal 语言二小时完成) ●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●● 一.单项选择题(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案。) 1.与16进制数 A1.2等值的10进制数是() A.101.2 B.111.4 C.161.125 D.177.25 2.一个字节(byte)由()个二进制组成。 A.8 B.16 C.32 D.以上都有可能 3.以下逻辑表达式的值恒为真的是()。 A.P∨(┓P∧Q)∨(┓P∧┓Q) B.Q∨(┓P∧Q)∨(P∧┓Q) C.P∨Q∨(P∧┓Q)∨(┓P∧Q) D.P∨┓Q∨(P∧┓Q)∨(┓P∧┓Q) 4.Linux下可执行文件的默认扩展名是( )。 A. exe B. com C. dll D.以上都不是 5.如果在某个进制下等式7*7=41成立,那么在该进制下等式12*12=()也成立。 A. 100 B. 144 C. 164 D. 196 6.提出“存储程序”的计算机工作原理的是()。 A. 克劳德?香农 B.戈登?摩尔 C.查尔斯?巴比奇 D.冯?诺依曼 7.前缀表达式“+ 3 * 2 + 512 ” 的值是()。A. 23 B. 25 C. 37 D. 65 8.主存储器的存取速度比中央处理器(CPU)的工作速度慢的多,从而使得后者的效率受到影响。而根据局部性原理,CPU所访问的存储单元通常都趋于一个较小的连续区域中。于是,为了提高系统整体的执行效率,在CPU中引入了( )。A.寄存器 B.高速缓存 C.闪存 D.外存 9.完全二叉树的顺序存储方案,是指将完全二叉树的结点从上到下、从左到右依次存放到一个顺序结构的数组中。假定根结点存放在数组的1号位置上,则第k号结点的父结点如果存在的话,应当存放在数组中的()号位置。 A. 2k B. 2k+1 C. k/2下取整 D. (k+1)/2 10.以下竞赛活动中历史最悠久的是()。A. NOIP B.NOI C. IOI D. APIO 二.不定项选择题(共10题,每题1.5分,共计15分。每题正确答案的个数不少于1。多选或少选均不得分)。 1.元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。如果第1个出栈的是R3,那么第5个出栈的可能是( )。A.R1 B.R2 C.R4 D.R5 2. Pascal语言,C语言和C++语言都属于( )。A.高级语言 B.自然语言 C.解释性语言 D.编译性语言

第十五届全国青少年信息学奥林匹克联赛初赛试题

第十五届全国青少年信息学奥林匹克联赛初赛试题 (提高组 C++语言二小时完成) ●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●● 一.单项选择题(共10题,每题分,共计15分。每题有且仅有一个正确答案。) 1、关于图灵机下面的说法哪个是正确的: A)图灵机是世界上最早的电子计算机。 B)由于大量使用磁带操作,图灵机运行速度很慢。 C)图灵机只是一个理论上的计算模型。 D)图灵机是英国人图灵发明的,在二战中为破译德军的密码发挥了重要作用。 2、关于BIOS下面的说法哪个是正确的: A)BIOS是计算机基本输入输出系统软件的简称。 B)BIOS里包含了键盘、鼠标、声卡、图形界面显器等常用输入输出设备的驱动程序。 C)BIOS一般由操作系统厂商来开发完成。 D)BIOS能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。 3、已知大写字母A的ASCII编码为65(十进制),则大写字母J的十六进制ASCII编码为: A) 48 B) 49 C) 50 D) 以上都不是 4、在字长为16位的系统环境下,一个16位带符号整数的二进制补码为101。其对应的十进制整数应该是: A)19 B) -19 C) 18 D) -18 5、一个包含n个分支结点(非叶结点)的非空满k叉树,k>=1,它的叶结点数目为: A) nk + 1 B) nk-1 C) (k+1)n-1 D. (k-1)n+1 6. 表达式a*(b+c)-d的后缀表达式是: A) abcd*+-B) abc+*d-C) abc*+d-D) -+*abcd 7、最优前缀编码,也称Huffman编码。这种编码组合的特点是对于较频繁使用的元素给与较短的唯一编 码,以提高通讯的效率。下面编码组合哪一组不是合法的前缀编码。 A)(00,01,10,11) B)(0,1,00,11) C)(0,10,110,111) D)(1,01,000,001) 8、快速排序平均情况和最坏情况下的算法时间复杂度分别为: A) 平均情况O(nlog2n),最坏情况O(n2) B) 平均情况O(n),最坏情况O(n2) C) 平均情况O(n),最坏情况O(nlog2n) D) 平均情况O(log2n),最坏情况O(n2) 9、左图给出了一个加权无向图,从 顶点V0开始用prim算法求最小生成 树。则依次加入最小生成树的顶点 集合的顶点序列为: A) V0, V1, V2, V3, V5, V4 B) V0, V1, V5, V4, V3, V3 C) V1, V2, V3, V0, V5, V4 D) V1, V2, V3, V0, V4, V5

NOI国家集训队论文分类(至2008)(摘抄自C博客)

NOI国家集训队论文分类(至2008) 摘抄自C博客 组合数学 计数与统计 2001 - 符文杰:《Polya原理及其应用》 2003 -许智磊:《浅谈补集转化思想在统计问题中的应用》 2007 -周冬:《生成树的计数及其应用》 2008 - 陈瑜希《Polya计数法的应用》 数位问题 2009 -高逸涵《数位计数问题解法研究》 2009 -刘聪《浅谈数位类统计问题》 动态统计 2004 -薛矛:《解决动态统计问题的两把利刃》 2007 -余江伟:《如何解决动态统计问题》 博弈 2002 -张一飞:《由感性认识到理性认识一一透析一类搏弈游戏的解答过程》2007 -王晓珂:《解析一类组合游戏》 2009 -曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问题》 2009 -方展鹏《浅谈如何解决不平等博弈问题》 2009 -贾志豪《组合游戏略述一一浅谈SG游戏的若干拓展及变形》母函数 2009 -毛杰明《母函数的性质及应用》 拟阵 2007 -刘雨辰:《对拟阵的初步研究》 线性规划 2007 -李宇骞:《浅谈信息学竞赛中的线性规划一一简洁高效的单纯形法实现与应用》 置换群 2005 -潘震皓:《置换群快速幕运算研究与探讨》 问答交互 2003 -高正宇:《答案只有一个一一浅谈问答式交互问题》 猜数问题 2003 -张宁:《猜数问题的研究:< 聪明的学生> 一题的推广》

2006 -龙凡:《一类猜数问题的研究》 数据结构 数据结构 2005 -何林:《数据关系的简化》 2006 -朱辰光:《基本数据结构在信息学竞赛中的应 用》 2007 -何森:《浅谈数据的合理组织》 2008 -曹钦翔《数据结构的提炼与压缩》 结构联合 2001 -高寒蕊:《从圆桌问题谈数据结构的综合运用》 2005 -黄刚:《数据结构的联合》 块状链表 2005 -蒋炎岩:《数据结构的联合——块状链表》 2008 -苏煜《对块状链表的一点研究》 动态树 2006 -陈首元:《维护森林连通性——动态树》 2007 -袁昕颢:《动态树及其应用》 左偏树 2005 -黄源河:《左偏树的特点及其应用》 跳表 2005 -魏冉:《让算法的效率跳起来”——浅谈跳跃表”的相关操作及其应用》2009 -李骥扬《线段跳表——跳表的一个拓展》 SBT 2007 - 陈启峰:《Size Bala nee Tree 》 线段树 2004 -林涛:《线段树的应用》 单调队列 2006 -汤泽:《浅析队列在一类单调性问题中的应用》 哈希表 2005 - 李羽修:《Hash函数的设计优化》 2007 - 杨弋:《Hash在信息学竞赛中的一类应用》 Splay 2004 -杨思雨:《伸展树的基本操作与应用》

信息学竞赛初赛模拟试题(附答案)

信息学竞赛初赛模拟试题 一、选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题分,多选无分,共30分) 1、下列叙述正确的是____。 A、指令中操作数规定准备执行的功能 B、在16位计算机中,一个字节由16位组成 C、断开电源后,DRAM中的内容便会丢失 D、软盘驱动器属于主机,软盘属于外设 2、关于中断请求信号的说法中,正确的是__ _。 A、中断请求信号总是由输入/输出设备发起的 B、中断请求信号有时是由CPU发起的 C、中断请求信号是由CPU和输入/输出设备同时发起的 D、中断请求信号是自动产生的 3、下列四项中,不属于计算机病毒特征的是。 A、潜伏性 B、传染性 C、激发性 D、免疫性 4、在资源管理器右窗格中,如果需要选定多个非连续排列的文件,应按组合键。 A、Ctrl+单击要选定的文件对象 B、Alt+单击要选定的文件对象 C、Shift+单击要选定的文件对象 D、Ctrl+双击要选定的文件对象 5、Windws98中,下列叙述正确的是。 A、“开始”菜单只能用鼠标单击“开始”按扭才能打开 B、Windows任务栏的大小是不能改变的 C、“开始”菜单是系统生成的,用户不能再设置它 D、Windows任务栏可以放在桌面四个边的任意边上 6、Internet实现了分布在世界各地的各类网络互联,其最基础和核心的协议是 A、TCP/IP B、FTP C、HTML D、HTTP 7、二进制数转换成十六进制数是________。 A、 B、77.3 C、 D、 8、能将高级语言编写的源程序转换成目标程序的是______。 A、编辑程序 B、编译程序 C、解释程序 D、链接程序 9、要存放10个24×24点阵的汉字字模,需要存储空间 A、74B B、320B C、720B D、72KB 10、下列各指标中,是数据通信系统的主要技术指标之一 A、重码率 B、传输速率 C、分辩率 D、时钟主频 11、在计算机中,既可作为输入设备又可作为输出设备的是。 A、显示器 B、磁盘驱动器 C、键盘 D、图形扫描仪 12、在微机的配置中常看到"处理器PentiumIII/667"字样,其数字667表示。 A、处理器的时钟主频是667MHZ B、处理器的运算速度是667MIPS C、处理器的产品设计系列号是第667号 D、处理器与内存间的数据交换速率是667KB/s 13 14、下列中错误的PASCAL表达式是 A、10e6* B、17 DIV 3 C、18 DIV 3* D、 15、下列表达式中,结果不为TRUE的是 A、[1. .10]=[1. .5,6. .10] B、[1,2,3]〈[1,2,3,4] C、[2,4]〉=[] D、7 IN [1. .10] 16、以下关于OSI的叙述中,错误的是________。

青少年信息学竞赛

青少年信息学竞赛(PASCAL语言)试卷 青少年信息学竞赛(PASCAL语言)试卷 参赛须知1、竞赛用时150分钟。2、全部试题答案均应写在答卷纸上,写在试卷纸上一概无效。 一、选择题 以下各题的每个选择填空部分有4个可供选择的答案,请选择正确答案并将答卷纸上相应圆圈涂黑。(每个选择项1.5分,多选无分,共30分) (1)我国自行研制的“曙光”巨型计算机属于【1】计算机。 【1】A)第一代B)第二代C)第三代D)第四代 (2)在下列设备中,【2】属于输入设备。 【2】A)显示器B)键盘C)打印机D)音箱 (3)以下是计算机存储容量大小的比较,正确的式子是【3】。 【3】A) 100B>1KB B)1GB<1KB C)0.25KB>100B D)900MB=90GB (4)显示A盘目录,正确的操作命令是【4】。 【4】A) C>A:DIR/W B) C>DIR A: C) A>DIR C: D) A>C:DIR/P (5)一个汉字占用两个字节,等于【5】二进制位。 【5】A) 4位B) 8位C) 16位D) 32位 (6)在下列几种存储器中,访问速度最快的是【6】。 【6】A) 硬盘存储器B) 软盘存储器C) 光盘存储器D) 内存储器 (7)对DOS启动除冷启动(Power)、热启动(CTRL+ALT+DEL)外,有的机器还可采用【7】来启动。 【7】A) ESC B)RESET C)CTRL+RESET D) CTRL+BREAK (8)WORD文档的扩展名是【8】。 【8】A)wps B)DOC C)TXT D) BMP (9)在wps中对文本进行字体的设置时,下面字号中最大的是【9】。 【9】A)0号字B)8号字C)1号字D)5号字 (10)在UCDOS中关闭输入法状态栏的切换键是【10】。 【10】A) Shift+F9 B) Shift+F6 C) Ctrl+ Shift D) Ctrl+Alt (11)当个人计算机以拨号方式接入因特网时,必须使用的是【11】。 【11】A)网卡B)调制解调器C)电话机D)浏览器软件 (12)在WINDOWS98的“我的电脑”窗口中,若已选定硬盘上的文件或文件夹,并按了DEL键和“确定”按钮,通常该文件或文件夹将【12】。 【12】A) 被删除并放入“回收站”B) 不被删除也不放入“回收站” C) 被删除但不放入回收站D) 不被删除但放入“回收站” (13)对软盘写保护可以防止【13】。 【13】A)数据写入B)数据丢失C)读数据出错D)以上都不对 (14)一台计算机感染病毒的可能途径是【14】。 【14】A)使用外来盘片B)使用表面被污染的盘片 C)驱动器故障D)键入了错误的命令 (15)在计算机内部,一切信息的存取、处理和传递的形式是【15】。 【15】A)ASCII码B)BCD码C)二进制码D)十六进制码 (16)下面的说法正确的是【16】。

NOIP2016信息学奥赛普及组初赛C++试题

NOIP2016第二十二届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 竞赛时间:2016年10月22日14:30~16:30 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项) 1.以下不是微软公司出品的软件是( )。 A.Powerpoint B.Word C.Excel D. Acrobat Reader 2.如果256种颜色用二进制编码来表示,至少需要( )位。 A.6 B.7 C.8 D.9 3.以下不属于无线通信技术的是( )。 A.蓝牙 B.WiFi C.GPRS D.以太网 4.以下不是CPU生产厂商的是( )。 A.Intel B.AMD C.Microsoft D.IBM 5.以下不是存储设备的是( )。 A.光盘 B.磁盘 C.固态硬盘 D.鼠标 6.如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照CapsLock、字母键A、字母键S和字母键D的顺序循环按键,即CapsLock、A、S、D、CapsLock、A、S、D、……,屏幕上输出的第81个字符是字母( )。 A.A B.S C.D D.a 7.二进制数00101100和00010101的和是( )。 A.00101000 B.01000001 C.01000100 D. 8.与二进制小数0.1相等的八进制数是( )。 A.0.8 B.0.4 C.0.2 D.0.1 9.以下是32位机器和64位机器的区别的是( )。 A.显示器不同 B.硬盘大小不同 C.寻址空间不同 D.输入法不同 10.以下关于字符串的判定语句中正确的是( ) A.字符串是一种特殊的线性表 B.串的长度必须大于零 C.字符串不可以用数组来表示 D.空格字符组成的串就是空串 11.一棵二叉树如右图所示,若采用顺序存储结构,即用一维数组元素存储该二 叉树中的结点(根结点的下标为1,若某结点的下标为i,则其左孩子位于下标2i 处、右孩子位于下标(2i+1)处),则图中所有结点的最大下标为( ) 。 A.6 B.10 C.12 D.15 12.若有如下程序段,其中s、a、b、c均己定义为整型变量,且a、c均己赋值(c大于0)。 s=a; for (b=1;b<=c;b++) s=s+1; 则与上述程序段修改s值的功能等价的赋值语句是( )。 A. s=a+b; B. s=a+c; C. s=s+c; D. s=b+c; 13.有以下程序: #include using namespace std; int main() { int k=4,n=0; while(n

相关文档
最新文档