tceic.com
简单学习网 让学习变简单
当前位置:首页 >> 学科竞赛 >>

1999年至2013年历年信息学奥赛提高组初赛试题


第十九届全国青少年信息学奥林匹克联赛初赛
提高组 Pascal 语言试题
竞赛时间:2013 年 10 月 13 日 14:30~16:30
一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分;每题有且仅有一个正确选项)
1.一个 32 位整型变量占用( )个字节。 A.4 B.8 C.32 D.128 2.二进制数 11.

01 在十进制下是( ) 。 A.3.25 B.4.125 C.6.25 D.11.125 3.下面的故事与( )算法有着异曲同工之妙。 从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:“从前有座山,山里有座庙,庙 里有个老和尚在给小和尚讲故事: ? 从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故 事…………………………?” A.枚举 B.递归 C.贪心 D.分治 4.1948 年, ( )将热力学中的熵引入信息通信领域,标志着信息论研究的开端。 A.冯· 诺伊曼(John von Neumann) B.图灵(Alan Turing) C.欧拉(Leonhard Euler) D.克劳德· 香农(Claude Shannon) 5.已知一棵二叉树有 2013 个节点,则其中至多有( )个节点有 2 个子节点。 A.1006 B.1007 C.1023 D.1024 6.在一个有向图中,如果任意两点之间都存在路径相连,则称其为连通图。右图是一个有 5 个顶点、8 条边的连通图。若要使它不再是连通图,至少要删去其中的( ) 条边。 A.2 B.3 C.4 D.5 7.斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn-1+Fn-2(n≥3) 。如 果用下面的函 数计算斐波那契数列的第 n 项,则其时间复杂度为( ) 。 function F(n:longint):longint; begin if n<=2 then F:=1 else F:=F(n-1)+F(n-2); end; A.O(1) B.O(n) C.O(n2) D.O(Fn) 8.二叉查找树具有如下性质:每个节点的值都大于其左子树上所有节点的值、小于其右子树上所有节点 的值。那么,二叉查找树的( )是一个有序序列。 A.先序遍历 B.中序遍历 C.后序遍历 D.宽度优先遍历 9.将(2,6,10,17)分别存储到某个地址区间为 0~10 的哈希表中,如果哈希函数 h(x)=( ) ,将 不会产生冲突,其中 a mod b 表示 a 除以 b 的余数。 A.x mod 11 B.x2 mod 11 C.2x mod 11 D. 10.IPv4 协议使用 32 位地址,随着其不断被分配,地址资源日趋枯竭。因此,它正逐渐被使用( ) 位地址的 IPv6 协议所取代。 A.40 B.48 C.64 D.128 11.二分图是指能将顶点划分成两个部分,每一部分内的顶点间没有边相连的简单无向图。那么 12 个顶 点的二分图至多有( )条边。 A.18 B.24 C.36 D.66 12.( )是一种通用的字符编码,它为世界上绝大部分语言设定了统一并且唯一的二进制编码,以满 足跨语言、跨平台的文本交换。目前它已经收录了超过十万个不同字符。 A.ASCII B.Unicode C.GBK2312 D.BIG5 13.把 64 位非零浮点数强制转换成 32 位浮点数后,不可能( ) 。 A.大于原数 B.小于原数 C.等于原数 D.与原数符号相反 14.对一个 n 个顶点、m 条边的带权有向简单图用 Dijkstr 算法计算单源最短路时,如果不使用堆或其它

? x ?mod 11,其中 ? x ?表示

x 下取整

优先队列进行优化,则其时间复杂度为( ) 。 3 2 A.O(mn+n ) B.O(n ) C.O((m+n)log n) D.O((m+n2)log n) 15.T(n)表示某个算法输入规模为 n 时的运算次数。如果 T(1)为常数,且有递归式 T(n)=2*T(n / 2)+2n,那 么 T(n) = ( ) 。 A.Θ(n) B.Θ(n log n) C.Θ(n2) D.Θ(n2log n)

二、不定项选择题(共 5 题,每题 1.5 分,共计 7.5 分;每题有一个或多个正确选项,多选 或少选均不得分)
1.下列程序中,正确计算 1,2,…,100 这 100 个自然数之和 sum(初始值为 0)的是( A. for i:=1 to 100 do B. i:=1; sum:=sum+I; while i>100 do begin sum:=sum+I; inc(i); end; C. i:=1; D. i:=1; repeat repeat sum:=sum+I; sum:=sum+I; inc(i); inc(i); until i>100; until i<=100; ) 。

2.( )的平均时间复杂度为 O(n log n),其中 n 是待排序的元素个数。 A.快速排序 B.插入排序 C.冒泡排序 D.归并排序 3.以 A0 作为起点,对下面的无向图进行深度优先遍历时(遍历的顺序与顶点字母的下标无关) ,最后一 个遍历到的顶点可能是( ) 。 A.A1 B.A2 C.A3 D.A4

4.( )属于 NP 类问题。 A.存在一个 P 类问题 B.任何一个 P 类问题 C.任何一个不属于 P 类的问题 D.任何一个在(输入规模的)指数时间内能够解决的问题 5.CCF NOIP 复赛考试结束后,因( )提出的申诉将不会被受理。 A.源程序文件名大小写错误 B.源程序保存在指定文件夹以外的位置 C.输出文件的文件名错误 D.只提交了可执行文件,未提交源程序

三、问题求解(共 2 题,每题 5 分,共计 10 分;每题全部答对得 5 分,没有部分分)
1. 某系统自称使用了一种防窃听的方式验证用户密码。密码是 n 个数 s1,s2,…,sn,均为 0 或 1。该系 统每次随机生成 n 个数 a1,a2,…,an,均为 0 或 1,请用户回答(s1a1+s2a2+…+snan)除以 2 的余 数。如果多次的回答总是正确,即认为掌握密码。该系统认为,即使问答的过程被泄露,也无助于破 解密码——因为用户并没有直接发送密码。 然而,事与愿违。例如,当 n=4 时,有人窃听了以下 5 次问答: 系统生成的 n 个数 问答编号 掌握密码的用户的回答 a1 a2 a3 a4 1 1 1 0 0 1 2 0 0 1 1 0 3 0 1 1 0 0

2

4 1 1 1 0 0 5 1 0 0 0 0 就破解出了密码 s1= ,s2= ,s3= ,s4= 。 2. 现有一只青蛙,初始时在 n 号荷叶上。当它某一时刻在 k 号荷叶上时,下一时刻将等概率地随机跳到 1,2,…,k 号荷尔蒙叶之一上,直至跳到 1 号荷叶为止。当 n=2 时,平均一共跳 2 次;当 n=3 时, 平均一共跳 2.5 次。则当 n=5 时,平均一共跳次。

四、阅读程序写结果(共 4 题,每题 8 分,共计 32 分)
1.var n,i:integer; str:string; isPlalindrome:Boolean; begin readln(str); n:=Length(str); isPlalindrome:=true; for i:=1 to (n idv 2) do begin if (str[i]<>str[n-i+1]) then isPlalindrome:=false; end; if (isPlalindrome) then writeln(?Yes?) else writeln(?No?); end. 输入:adceecba 输出: 2.var a,b,u,v,I,num:integer; begin readln(a,b,u,v); num:=0; for i:=a to b do begin if (I mod u=0)or(I mod v=0) then inc(num); end; writeln(num); end. 输入:1 1000 10 15 输出: 3.const SIZE=100; var n,ans,I,j:integer; height,num:array[1..SIZE] of integer; begin read(n); for i:=1 to n do begin read(height[i]); num[i]:=1; for j:=1 to i-1 do begin
3

if ((height[j]<height[i]) and (num[j]>=num[i])) then num[i]:=num[j]+1; end; end; ans:=0; for i:=1 to n do begin if (num[i]>ans) then ans:=ans+num[i]; end; writeln(ans); end. 输入: 8 3 2 5 11 12 7 4 10 输出: 4.const SIZE=100; var n,m,p,count,ans,x,y,I,j:integer; a:array[1..SIZE,1..SIZE] of integer; procedure colour(x,y:integer); begin inc(count); a[x][y]:=1; if (x>1)and(a[x-1][y]=0) then colour(x-1,y); if (y>1)and(a[x][y-1]=0) then colour(x,y-1); if (x<n)and(a[x+1][y]=0) then colour(x+1,y); if (y<m)and(a[x][y+1]=0) then colour(x,y+1); end; begin fillchar(a,sizeof(a),0); readln(n,m,p); for i:=1 to p do begin read(x,y); a[x][y]:=1; end; ans:=0; for i:=1 to n do for j:=1 to m do if a[i][j]=0 then begin count:=0; colour(i,j); if (ans<count) then ans:=count; end; writeln(ans); end. 输入: 659 14

4

23 24 32 41 43 45 54 64 输出:

五、完善程序(第 1 题 15 分,第 2 题 13 分,共计 28 分)
1.(序列重排)全局数组变量 a 定义如下: const int SIZE=100; int a[SIZE],n; 它记录着一个长度为 n 的序列 a[1],a[2],…,a[n]。 现在需要一个函数,以整数 p(1≤p≤n)为参数,实现如下功能:将序列 a 的前 p 个数与后 n-p 个数对 调,且不改变这 p 个数(或 n-p 个数)之间的相对位置。例如,长度为 5 的序列 1,2,3,4,5,当 p=2 时重排结果为 3,4,5,1,2。 有一种朴素的算法可以实现这一需求,其时间复杂度为 O(n)、空间复杂度为 O(n): procedure swap1(p:longint); var I,j:longint; b:array[1..SIZE] of longint; begin for i:=1 to p do b[ (1) ]:=a[i]; //(2 分) for i:=p+1 to n do b[i-p]:=a[i]; for i:=1 to n do a[i]:=b[i]; end; 我们也可以用时间换空间,使用时间复杂度为 O(n2)、空间复杂度为 O(1)的算法: procedure swap2(p:longint); var I,j,temp:longint; begin for i:=p+1 to n do begin temp:=a[i]; for j:=I downto (2) do //(2 分) a[j]:=a[j-1]; (3) :=temp; //(2 分) end; end; 事实上,还有一种更好的算法,时间复杂度为 O(n)、空间复杂度为 O(1); procedure swap3(p:longint); var start1,end1,start2,end2,I,j,temp:longint; begin start1:=1; end1:=p; start2:=p+1; end2:=n; while true do begin
5

i:=star1; j:=start2; while (i<=end1)and(j<=end2) do begin temp:=a[i]; a[i]:=a[j]; a[j]:=temp inc(i); inc(j); end; if i<=end1 then start1:=i else if (4) then //(3 分) begin start1:= (5) ; //(3 分) end1:= (6) ; //(3 分) start2:=j; end else break; end; end; 2.(两元序列)试求一个整数序列中,最长的仅包含两个不同整数的连续子序列。如有多个子序列并列 最长,输出任意一个即可。例如,序列“1 1 2 3 2 3 2 3 3 1 1 1 3 1”中,有两段满足条件的最长子序列, 长度均为 7,分别用下划线和上划线标出。 program two; const SIZE=100; var n,I,j,cur1,cur2,count1,count2, ans_length,ans_start,ans_end:longint; //cur1,cur2 分别表示当前子序列中的两个不同整数 //count1,count2 分别表示 cur1,cur2 在当前子序列中出现的次数 a:array[1..SIZE] of longint; begin readln(n); for i:=1 to n do read(a[i]); i:=1; j:=1; //i,j 分别表示当前子序列的首尾,并保证其中至多有两个不同整数 while (j<=n)and(a[j]=a[i]) do inc(j); cur1:=a[i]; cur2:=a[j]; count1:= (1) ; //(3 分) count2:=1; ans_length:=j-i+1; while j<n do begin inc(j); if a[j]=cur1 then inc(count1) else if a[j]=cur2 then inc(count2) else begin

6

if a[j-1]= (2) then //(3 分) while count2>0 do begin while count2>0 do begin if a[i]=cur1 then dec(count1) else dec(count2); inc(i); end; cur2:=a[j]; count2:=1; end else begin while count1>0 do begin if a[i]=cur1 then (3) //(2 分) else (4) ; //(2 分) inc(i); end; (5) ; //(3 分) count1:=1; end; end; if (ans_length<j-i+1) then begin ans_length:=j-i+1; ans_start:=I; ans_end:=j; end; end; for i:=ans_start to ans_end do write(a[i],? ?); end.

7

第十八届全国青少年信息学奥林匹克联赛初赛
竞赛时间:2012 年 10 月 13 日 14:30~16:30 一、单项选择题(共 10 题,每题 1.5 分,共计 15 分;每题有且仅有一个正确选项) 1.目前计算机芯片(集成电路)制造的主要原料是( ) ,它是一种可以在沙子中提炼出的物质。 A.硅 B.铜 C.锗 D.铝 2. ( )是主要用于显示网页服务器或者文件系统的 HTML 文件的内容,并让用户与这些文件交互的一 种软件。 A.资源管理器 B.浏览器 C.电子邮件 D.编译器 3.目前个人电脑的( )市场占有率最靠前的厂商包括 Intel、AMD 等公司。 A.显示器 B.CPU C.内存 D.鼠标 4.无论是 TCP/IP 模型还是 OSI 模型,都可以视为网络的分层模型,每个网络协议都会被归入某一层中。 如果用现实生活中的例子来比喻这些“层” ,以下最恰当的是( ) 。 A. 中国公司的经理与波兰公司的经理交互商业文件

B. 军队发布命令

C. 国际会议中,每个人都与他国地位对等的人直接进行会谈

8

D. 体育比赛中,每一级比赛的优胜者晋级上一级比赛

5.如里不在快速排序中引入随机化,有可能导致的后果是( A.数组访问越界 B.陷入死循环 C.排序结果错误 D.排序时间退化为平方级

) 。

6.1946 年诞生于美国宾夕法尼亚大学的 ENIAC 属于( )计算机。 A.电子管 B.晶体管 C.集成电路 D.超大规模集成电路

7.在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。 A.系统分配的栈空间溢出 B.系统分配的堆空间溢出 C.系统分配的队列空间溢出 D.系统分配的链表空间溢出

8.地址总线的位数决定了 CPU 可直接寻址的内存空间大小,例如地址总线为 16 位,其最大的可寻址空 间为 64KB。如果地址总线是 32 位,则理论上最大可寻址的内存空间为( ) 。 A.128KB B.1MB C.1GB D.4GB 9.以下不属于 3G(第三代移动通信技术)标准的是( ) 。 A.GSM B.TD-SCDMA C.CDMA2000 D.WCDMA 10.仿生学的问世开辟了独特的科学技术发展道路。人们研究生物体的结构、功能和工作原理,并将这些 原理移植于新兴的工程技术中。以下关于仿生学的叙述,错误的是( ) A.由研究蝙蝠,发明雷达 B.由研究蜘蛛网,发明因特网 C.由研究海豚,发明声纳 D.由研究电鱼,发明伏特电池 二、不定项选择题(共 10 题,每题 1.5 分,共计 15 分;每题有一个或多个正确选项,多选或少选均不得 分) 1.如果对于所有规模为 n 的输入,一个算法均恰好进行( 度为 O(2 ) 。A. 2
n
n ?1

)次运算,我们可以说该算法的时间复杂

B. 3

n

C. n * 2

n

D. 2

2n

2 . 从顶点 A0 出发,对有向图(

)进行广度优先搜索( BFS )时 ,一种可能的遍历顺序 是

A0 , A1 , A2 , A3 , A4 。

9

3.如果一个栈初始时为空,且当前栈中的元素从栈顶到栈底依次为 a,b,c(如右图所示) ,另有元素 d 已经出栈,则可能的入栈顺序是( ) 。 A.a, b, c, d B.b, a, c, d C.a, c, b, d D.d, a, b, c )属于三原色之一。

4.在计算机显示器所使用的 RGB 颜色模型中, ( A.黄色 B.蓝色 C.10 D.15

5.一棵二叉树一共有 19 个节点,其叶子节点可能有( A.1 B.9 C.紫色 D.绿色

)个。

6.已知带权有向图 G 上的所有权值均为正整数,记顶点 u 到顶点 v 的最短路径的权值为 d (u, v) 。若

v1 , v2 , v3 , v4 , v5 是图 G 上的顶点,且它们之间两两都存路径可达,则以下说法正确的有(
A. v1 到 v 2 的最短路径可能包含一个环 B. d (v1 , v2 ) ? d (v2 , v1 ) C. d (v1 , v3 ) ? d (v1 , v2 ) ? d (v2 , v3 ) D . 如 果 v1 ? v2 ? v3 ? v4 ? v是 5 v1 到 v5 的一条最短路径,那么

) 。

v2 ? v3 ? v4 是 v2 到 v4 的一条最短路径
7.逻辑异或( ? )是一种二元运算,其真值表如下所示。 a False False True True b False True False True ) 。

a?b
False True True Flase

以下关于逻辑异或的性质,正确的有( A.交换律: a ? b ? b ? a B.结合律: (a ? b) ? c ? a ? (b ? c)

10

C.关于逻辑与的分配律: a ? (b ? c) ? (a ? b) ? (a ? c) D.关于逻辑或的分配律: a ? (b ? c) ? (a ? b) ? (a ? c) 8.十进制下的无限循环小数(不包括循环节内的数字均为 0 成均为 9 的平凡情况) ,在二进制下有可能是 ( ) 。 A.无限循环小数(不包括循环节内的数字均为 0 或均为 9 的平凡情) B.无限不循环小数 C.有限小数 D.整数 9. ( )是目前互联网上常用的 E-mail 服务协议。 A.HTTP B.FTP C.POP3 D.SMTP 10.以下关于计算复杂度