为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

2007-2011年noip初赛提高组试题及答案

2018-02-23 50页 doc 169KB 35阅读

用户头像

is_153723

暂无简介

举报
2007-2011年noip初赛提高组试题及答案2007-2011年noip初赛提高组试题及答案 第十七届全国青少年信息学奥林匹克联赛初赛试题 ( 提高组 Pascal语言 两小时完成 ) ?? 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ?? 一、单项选择题(共20题,每题1.5分。共计30分。每题有且仅有一个正确选项。) 1(在二进制下,1100011 +( )= 1110000。 A(1011 B(1101 C(1010 D(1111 2(字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的( )。 A(66 B(5A C...
2007-2011年noip初赛提高组试题及答案
2007-2011年noip初赛提高组试题及答案 第十七届全国青少年信息学奥林匹克联赛初赛试题 ( 提高组 Pascal语言 两小时完成 ) ?? 全部试题答案均写在答卷纸上,写在试卷纸上一律无效 ?? 一、单项选择题(共20题,每题1.5分。共计30分。每题有且仅有一个正确选项。) 1(在二进制下,1100011 +( )= 1110000。 A(1011 B(1101 C(1010 D(1111 2(字符“A”的ASCII码为十六进制41,则字符“Z”的ASCII码为十六进制的( )。 A(66 B(5A C(50 D(视具体的计算机而定 3(右图是一棵二叉树,它的先序遍历是( )。 A(ABDEFC B(DBEFAC C(DFEBCA D(ABCDEF 的重要组成部分。 4(寄存器是( ) A(硬盘 B(高速缓存 C(内存 D(中央处理器(CPU) )。 5(广度优先搜索时,需要用到的数据结构是( A(链 B(队列 C(栈 D(散列表 6(在使用高级语言编写程序时,一般提到的“空间复杂度”中的“空间”是指( )。 A(程序运行时理论上所占的内存空间 B(程序运行时理论上所占的数组空间 C(程序运行时理论上所占的硬盘空间 D(程序源文件理论上所占的硬盘空间 7(应用快速排序的分治思想,可以实现一个求第K大数的程序。假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为( )。 2 A(O(n)B(O(n log n)C(O(n) D(O(1) 8(为解决Web应用中的不兼容问题,保障信息的顺利流通,( )制定了一系列,涉及HTML、XML、CSS等,并建议开发者遵循。 A(微软 B(美国计算机协会(ACM) C(联台国教科文组织 D(万维网联盟(W3C) 9(体育课的铃声响了,同学们都陆续地奔向操场,按老师的要求从高到矮站成一排。每个同学按顺序来到操场时,都从排尾走向排头,找到第一个比自己高的同学,并站在他的后面。这种站队的方法类似于( )算法。 A(快速排序 B(插入排序 C(冒泡排序 D(归并排序 10(1956年( )授予肖克利(William Shockley)、巴丁(John Bardeen)和布拉顿(Walter Brattain),以表彰他们对半导体的研究和晶体管效应的发现。 A(诺贝尔物理学奖 B(约翰•冯•诺依曼奖 C(图灵奖 D(高德纳奖(Donald E(Knuth Prize) 二、不定项选择题(共10题,每题1(5分,共计15分。每题有一个或多个正确选项。多选或少选均不得分。) 1(如果根结点的深度记为1,则一棵恰有2011个叶子结点的二叉树的深度可能是( )。 A(10 B(11 C(12 D(2011 2(在布尔逻辑中,逻辑“或”的性质有( )。 A(交换律:P V Q = Q V P B(结台律:P V ( Q V R ) = ( P V Q ) V R C(幂等律:P V P = P D(有界律:P V 1 = 1 (1表示逻辑真) 3(一个正整数在十六进制下有100位,则它在二进制下可能有( )位。 A(399 B(400 C(401 D(404 4(汇编语言( )。 A(是一种与具体硬件无关的程序设计语言 B(在编写复杂程序时,相对于高级语言而言代码量较大,且不易调试 C(可以直接访问寄存器、内存单元、I/O端口 D(随着高级语言的诞生,如今已完全被淘汰,不再使用 5(现有一段文言文,要通过二进制哈夫曼编码进行压缩。简单起见,假设这段文言文只由4个汉字“之”、“乎”、“者”、“也”组成,它们出现的次数分别为700、600、300、400。那么,“也”字的编码长度可能是( )。 A(1 B(2 C(3 D(4 6(生物特征识别,是利用人体本身的生物特征进行身份认证的一种技术。目前,指纹识别、虹膜识别、人脸识别等技术己广泛应用于政府、银行、安全防卫等领域。以下属于生物特征识别技术及其应用的是( )。 A(指静脉验证 B(步态验证 C(ATM机密码验证 D(声音验证 7(对于序列“7、5、1、9、3、6、8、4”,在不改变顺序的情况下,去掉( )会使逆序对的个数减少3。 A(7 B(5 C(3 D(6 8(计算机中的数值信息分为整数和实数(浮点数)。实数之所以能表示很大或者很小的数,是由于使用了( )。 A(阶码 B(补码 C(反码 D(较长的尾数 9(对右图使用Dijkstra算法计算S点到其余各点的最短路径 长度时,到B点的距离d[B]初始时赋为8,在算法的执行过程 中还会出现的值有( )。 A(3 B(7 C(6 D(5 10(为计算机网络中进行数据交换而建立的规则、标准或约定的集合成为网络。下列英文缩写中,( )是网络协议。 A(HTTP B(TCP/IP C(FTP D(WWW 三、问题求解(共2题,每题5分,共计10分) 1(平面图是可以画在在平面上,且它的边仅在顶点上才能相交的简单 无向图。4个顶点的平面图至多有6条边,如右图所示。那么,5个顶 点的平面图至多有______条边。 2(定义一种字符串操作,一次可以将其中一个元素移到任意位置。举例说明,对于字符串”BcA”,可以将A移到B之前,变成字符串”ABC”。如果要将字符串”DACHEBGIF”变成”ABCDEFGHI”,最少需要________次操作。 四、阅读程序写结果(共4题,每题8分,共计32分) 1( Const SIZE = 100; var n, i, sum, x : integer; a : array[1..SIZE] of integer; begin readln(n); fillchar(a, sizeof(a), 0); for i:= 1 to n do begin read(x); inc(a[x]); end; i := 0; sum := 0; while sum < (n div 2 + 1) do begin inc(i); sum :=sum + a[i]; end; writeln(i); end( 输入: 11 4 5 6 6 4 3 3 2 3 2 1 输出: 2( var n : integer; procedure f2(x, y : integer); forward; procedure f1(x, y : integer); begin if x < n then f2(y, x + y); end; procedure f2(x, y : integer); begin write(x, ’ ’); f1(y, x + y); end; begin readln(n); f1(0, 1); end( 输入:30 输出:_____________ 3( const V = 100; var visited : array[1..v] of boolean; e : array[1..V, 1..V] of integer; n, m, ans, i, j, a, b, c : integer; procedure dfs(x, len : integer); var I : integer; begin visited[x] := true; if len > ans then ans := len; for i := 1 to n do if (not visited[i]) and (e[x, i] <> -1) then dfs(i, len + e[x, i]); visited[x] := false; end; begin readln(n, m); for i := 1 to n do for j := 1 to n do e[i][j] := -1; for i := 1 to m do begin readln(a, b, c); e[a][b] := c; e[b][a] := c; end; for i := 1 to n do visited[i] := false; ans := 0; for i := 1 to n do dfs(i, 0); writeln(ans); end. 输入: 4 6 1 2 10 2 3 20 3 4 30 4 1 40 1 3 50 2 4 60 输出:__________ 4. const SIZE = 10000; LENGTH = 10; var sum : longint; n, m, i, j : integer; a : array[1..SIZE, 1..LENGTH] of integer; function h(u, v : integer) : integer; var ans, i : integer; begin ans := 0; for i := 1 to n do if a[u][i] <> a[v][i] then inc(ans); h := ans; end; begin readln(n); filichar(a, sizeof(a), 0); m := 1; repeat i := 1; while (i <= n) and (a[m][i] = 1) do inc(i); if i > n then break; inc(m); a[m][i] :=1; for j := i + 1 to n do a[m][j] := a[m - 1][j]; until false; sum :=0; for i := 1 to m do for j := 1 to m do sum := sum + h(i, j); writeln(sum); end. 输入:7 输出:____________ 五、完善程序(第1题,每空2分,第2题,每空3分,共计28分) 1. (大整数开方)输入一个正整数n(1?n<10100),试用二分法计算它的平方根的整 数部分。 const SIZE = 200; type hugeint = record len : integer; num : array[1..SIZE] of integer; end; //len表示大整数的位数;num[1]表示个位、num[2]表示十位,以此类推 var s : string; i : integer; target, left, middle, right : hugeint; function times(a, b : hugeint) : hugeint: var i, j : integer; ans : hugeint; begin filIchar(ans, sizeof(ans), 0); for i := 1 to a.1en do for j := 1 to b.1en do ___?___ := ans.num[i + j — 1] + a.num[i] * b.num[j]; for i := 1 to a.len + b.1en do begin ans.num[i + 1] := ans.num[i + 1] + ans.num[i] div 10; ___?___; if ans.num[a.1en + b.1en] > 0 then ans.len := a.1en + b.1en else ans.len :=a.1en + b.1en – 1; end; times := ans; end; function add(a, b : hugeint) : hugeint; var i : integer; ans : hugeint; begin fillchar(ans.num, sizeof(ans.num), 0); if a.1en > b.1en then ans.len := a.1en else ans.len := b.len; for i := 1 to ans.1en do begin ans.num[i] :=___?___; ans.num[i + 1] := ans.num[i + 1] + ans.num[i] div 10; ans.num[i] := ans.num[i] mod 10; end; if ans.num[ans.1en + 1] > 0 then inc(ans.len); add:=ans; end; function average(a, b : hugeint) : hugeint; var i : integer; ans : hugeint; begin ans := add(a, b); for i := ans.1en downto 2 do begin ans.num[i - 1] := ans.num[i - 1] + (___?___) * 10; ans.num[i] := ans.num[i] div 2; end; ans.num[i] := ans.num[i] div 2; if ans.num[ans.len] = 0 then dec(ans.len); average := ans; end; function plustwo(a : hugeint) : hugeint; var i : integer; ans : hugeint; begin ans := a; ans.num[1] := ans.num[1] + 2; i := 1; while(i <= ans.len) and (ans.num[i] >= 10) do begin ans.num[i + 1] := ans.num[i + 1] + ans.num[i] div 10; ans.num[i] := ans.num[i] mod 10; inc(i); end; if ans.num[ans.len + 1] > 0 then___?___; plustwo := ans; end; function over(a, b : hugeint) : boolean; var i : integer; begin if(___?___)then begin over := false; exit; end; if a.1en > b.1en then begin over := true; exit; end; for i := a.len downto 1 do begin if a.num[i] < b.num[i] then begin over := false; exit; end; if a.num[i] > b.num[i] then begin over := true; exit; end; end; over := false; end;’ begin readln(s); fillchar(target.num, sizeof(target.num), 0); target.1en := 1ength(s); for i := 1 to target.1en do target.num[i] := ord(s[target.1en – i + 1]) - ___?___; filichar(left.num, sizeof(1eft.num), 0); left.1en := 1; left.num[i] := 1; right := target; repeat middle := average(1eft, right); if over(___?___) then right := middle else 1eft := middle; until over(plustwo(1eft), right); for i := left.1en downto 1 do write(1eft.num[i]); writeln; end. 2. (笛卡尔树)对于一个给定的两两不等的正整数序列,笛卡尔树是这样的一棵二叉树: 首先,它是一个最小堆,即除了根结点外,每个结点的权值都大于父节点的权值;其次,它 的中序遍历恰好就是给定的序列。例如,对于序列7、2、12、1、10、5、15、3,下图就 是一棵对应的笛卡尔树。现输入序列的规模n(1?n<100)和序列的n个元素,试求其对应 的笛号尔树的深度d(根节点深度为1),以及有多少个叶节点的深度为d。 const SIZE = 100; INFINITY = 1000000; var n, maxDeep, num, i : integer; a : array[1..SIZE] of integer; procedure solve(1eft, right, deep : integer); var i, j, min : integer; begin if deep > maxDeep then begin maxDeep := deep; num := 1; end else if deep = maxDeep then ___?___; min := INFINITY; for i := 1eft to right do if min > a[i] then begin min := a[i]; ___?___; end; if left < j then ___?___; if j < right then ___?___; end; begin readln(n); for i := 1 to n do read(a[i]); maxDeep := 0; solve(1, n, 1); writeln(maxDeep, ‘ ’, num); end. 第十六届(2010年)全国青少年信息学奥林匹克联赛初赛 试题 ( 提高组 Pascal语言 二小时完成 ) ?? 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ?? 一、单项选择题 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 + 5 12 ” 的值是( )。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 二、不定项选择题 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.编译性语言 3. 原地排序是指在排序过程中(除了存储待排序元素以外的)辅助空间的大小与数据规模无关的排序算法。以下属于原地排序的有( )。A.冒泡排序 B.插入排序 C.基数排序 D.选择排序 4. 在整数的补码表示法中,以下说法正确的是( )。 A(只有负整数的编码最高位为1 B(在编码的位数确定后,所能表示的最小整数和最大整数的绝对值相同 C(整数0只有一个唯一的编码 D(两个用补码表示的数相加时,若在最高位产生进位,则表示运算溢出 5. 一颗二叉树的前序遍历序列是ABCDEFG,后序遍历序列是CBFEGDA,则根结点的左子树的结点个数可能是( )。 A(0 B. 2 C. 4 D. 6 6. 在下列HTML语句中,可以正确产生一个指向NOI官方网站的超链接的是( )。 A(欢迎访问NOI网站 B(欢迎访问NOI网站 C(h t t p : / / w w w . n o i . c n D(欢迎访问NOI网站 7. 关于拓扑排序,下列说法正确的是( )。 A(所有连通的有向图都可以实现拓扑排序 B(对同一个图而言,拓扑排序的结构是唯一的 入度为0的结点总会排在入度大于0的结点的前面 C(拓扑排序中 D(拓扑排序结果序列中的第一个结点一定是入度大于0的点 8. 一个平面的法线是指与该平面垂直的直线。过点(1,1,1)、(0,3,0)、(2,0,0)的平面的法线是( )。 A(过点(1,1,1)、(2,3,3)的直线 B(过点(1,1,1)、(3,2,1)的直线 C(过点(0,3,0)、(-3,1,1)的直线 D(过点(2,0,0)、(5,2,1)的直线 9.双向链表中有两个指针域llink和rlink,分别指向该结点的前驱及后继。设p指向链表中的一个结点,他的左右结点均为非空。现要求删除结点p,则下列语句序列中正确的是( )。 A(p->rlink->llink=p->rlink; p->llink->rlink=p->llink; delete p; B(p->llink->rlink=p->rlink; p->rlink->llink = p->llink; delete p; C(p->rlink->llink = p->llink; p->rlink->llink ->rlink = p->rlink; delete p; D(p->llink->rlink = p->rlink; p->llink->rlink->link = p->llink; delete p; 10. 今年(2010年)发生的事件有( )。 A(惠普实验室研究员Vinay Deolalikar 自称证明了P?NP B(英特尔公司收购计算机安全软件公司迈克菲(McAfee) C(苹果公司发布iPhone 4手机 D(微软公司发布Windows 7 操作系统 三、问题求解 1(LZW编码是一种自适应词典编码。在编码的过程中,开始时只有一部基础构造元素的编码词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的编码会被追加到词典中,并用于后继信息的编码。 举例说明,考虑一个待编码的信息串:“xyx yy yy xyx”。初始词典只有3个条目,第一个为x,编码为1;第二个为y,编码为2;第三个为空格,编码为3;于是串“xyx”的编码为1-2-1(其中-为编码分隔符),加上后面的一个空格就是1-2-1-3。但由于有了一个空格,我们就知道前面的“xyx”是一个单词,而由于该单词没有在词典中,我们就可以自适应的把这个词条添加到词典里,编码为4,然后按照新的词典对后继信息进行编码,以此类推。于是,最后得到编码:1-2-1-3-2-2-3-5-3-4。 我们可以看到,信息被压缩了。压缩好的信息传递到接受方,接收方也只要根据基础词典就可以完成对该序列的完全恢复。解码过程是编码过程的逆操作。现在已知初始词典的3个条目如上述,接收端收到的编码信息为2-2-1-2-3-1-1-3-4-3-1-2-1-3-5-3-6,则解码后的信息串是”____________”。 2.无向图G有7个顶点,若不存在由奇数条边构成的简单回路,则它至多有__________条边。 3.记T为一队列,初始时为空,现有n个总和不超过32的正整数依次入列。如果无论这些数具体为何值,都能找到一种出队的方式,使得存在某个时刻队列T中的数之和恰好为9,那么n的最小值是___________。 四、阅读程序写结果 1. const size = 10; var i, j, cnt, n, m : integer; data : array[1..size] of integer; begin readln(n, m); for i := 1 to n do read(data[i]); for i := 1 to n do begin cnt := 0; for j := 1 to n do if (data[i] < data[j]) or ((data[j] = data[i]) and (j < i)) then inc(cnt); if cnt = m then writeln(data[i]); end; end. 输入 5 2 96 -8 0 16 87 输出:__________ 2. const size = 100; var na, nb, i, j, k : integer; a, b : array[1..size] of integer; begin readln(na); for i := 1 to na do read(a[i]); readln(nb); for i := 1 to nb do read(b[i]); i := 1; j := 1; while (i <= na) and (j <= nb) do begin if a[i] <= b[j] then begin write(a[i],' '); inc(i); end else begin write(b[j], ' '); inc(j); end; end; if i <= na then for k := i to na do write(a[k], ' '); if j <= nb then for k := j to nb do write(b[k], ' '); end. 输入 5 1 3 5 7 9 4 2 6 10 14 输出:__________ 3. const num = 5; var n: integer; function r(n : integer) : integer; var i : integer; begin if n <= num then begin r := n; exit; end; for i :=1 to num do if r(n-i) < 0 then begin r:=i; exit; end; r:=-1; end; begin readln(n); writeln(r(n)); end. 输入 16 输出:__________ 4. const size=100; var n,m,x,y,i :integer; r: array[1.. size] of integer; map : array[1..size, 1..size] of boolean; found : boolean; function successful : boolean; var i : integer; begin for i :=1 to n do if not map[r[i]][r[i mod n + 1]] then begin successful := false; exit; end; successful :=true; end; procedure swap(var a, b : integer); var t : integer; begin t := a; a := b; b := t; end; procedure perm(left, right : integer); var i : integer; begin if found then exit; if left > right then begin if successful then begin for i := 1 to n do writeln(r[i], ' '); found := true; end; exit; end; for i:= left to right do begin swap(r[left], r[i]); perm(left + 1, right); swap(r[left], r[i]); end; end; begin readln(n, m); fillchar(map, sizeof(map), false); for i := 1 to m do begin readln(x, y); map[x][y] := true; map[y][x] := true; end; for i := 1 to n do r[i] := i; found := false; perm(1, n); if not found then writeln('No soloution'); end. 输入: 9 12 1 2 2 3 3 4 4 5 5 6 6 1 1 7 2 7 3 8 4 8 5 9 6 9 输出:__________ 五、完善程序 1.(过河问题) 在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥走到河的左岸.在伸 手不见五指的黑夜里,过桥时必须借照灯光来照明,不幸的是,他们只有一盏灯.另外,独木桥上最多能承受 两个人同时经过,否则将会坍塌.每个人单独过独木桥都需要一定的时间,不同的人要的时间可能不同.两个 人一起过独木桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥所花费的时间.现在输入 N(2<=N<1000)和这N个人单独过桥需要的时间,请计算总共最少需要多少时间,他们才能全部到达河左岸. 例如,有3个人甲、乙、丙,他们单独过桥的时间分别为1 2 4,则总共最少需要的时间为7.具体 方法是:甲 乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然后甲,丙在一起过桥到河的左岸,总 时间为2+1+4=7. const SIZE = 100; INFINITY = 10000; LEFT = true; RIGHT = false; LEFT_TO_RIGHT = true; RIGHT_TO_LEFT = false; var n, i : integer; time : array[1..Size] of integer; pos :array[1..Size] of Boolean; , b :integer) : integer; function max(a begin if a > b then max := a else max := b; end; function go(stage : boolean) : integer; var i, j, num, tmp, ans : integer; begin if (stage = RIGHT_TO_LEFT) then begin num := 0; ans :=0; for i := 1 to n do if pos[i] = Rignt then begin inc(num); if time[i] > ans then ans := time[i]; end; if __________ then begin go := ans; exit; end; ans := INFINITY; for i := 1 to n – 1 do if pos[i] = RIGHT then for j := i+1 to n do if pos[j] = RIGHT then begin pos[i] := LEFT; pos[j] := LEFT; tmp := max(time[i], time[j]) + _______; if tmp < ans then ans := tmp; pos[i] := RIGHT; pos[j] := RIGHT; end; go := ans; end else if (stage = LEFT_TO_RIGHT) then begin ans := INFINITY; for i := 1 to n do if _______ then begin pos[i] := RIGHT; tmp := ________; if tmp < ans then ans := tmp; _________; end; go := ans; end else go := 0; end; begin readln(n); for i := 1 to n do begin read(time[i]); pos[i] := RIGHT; end; writeln(go(RIGHT_TO_LEFT)); end. 2((烽火传递)烽火台又称烽燧,是重要的军事防御设施,一般建在险要处或交通要道 上。 一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息;夜晚燃烧干柴,以火光传递军情。在 某两座城市之间有n个烽火台,每个烽火台发出信号都有一定的代价。为了使情报准确地 传递,在连续m个烽火台中至少要有一个发出信号。现输入n、m和每个烽火台发出信号的 代价,请计算总共最少花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准 确 传递。 例如,有5个烽火台,它们发出信号的代价依次为1、2、5、6、2,且m为3,则总 共最少花费的代价为4,即由第2个和第5个烽火台发出信号。 const SIZE= 100; var n. m, r, i : integer; value, heap, pos, home, opt : array[l..SIZEl of integer; //heap [i]表示用顺序数组存储的堆heap中第i个元素的值 //pos [i]表示opt [i]在堆heap中的位置,即heap lpos [i]] =opt [i] //home [i]表示heap [i]在序列opt中的位置,即opt [home [i]] =heap [i] procedure swap (i, j : integer)j ,,交换堆中的第i个和第j个元素 var tmp : integer; begin pos [home [i]] :=j; pos [home[j]] :=i; tmp :=heap [i]; heap [i] :=heap [j]; heap [j] :=tmp; tmp :=home [i]; home [i] :=home[j]; home [j] := tmp; end; procedure add (k : integer) ; ,,在堆中插入opt[k] var i : integer; begin inc (r) ; heap [r] := ? pos [k] := r; ? while (i > 1) and (heap[i] < heap[i div _2]) do begin swap (i, i div 2); i := i div 2; end; end; procedure remove (k : integer) ; ,,在堆中删除opt[k] var i, j : integer; begin i := pos [k] ; swap (i, r) ; dec (r) ; if i = r + 1 then exit; while (i > 1) and (heap [i] < heap[i div 2]) do begin swap (i, i div 2); i := i div 2; end; while i + i <= r do begin if (i + i + 1 <= r) and (heap[i + i + 1] < heap[i + i]) then j:=i+i+l else ? if heap [i] > heap [j] then begin ? i: = j end else break; end; end; begin readln (n, m) ; for i := 1 to n do read (value [i] ) ; r := 0; for i := 1 to m do begin opt [il := value [i] ; add (i) ; end; for i := m + 1 to n do begin opt[i] := ? remove ( ? ) add (i) ; end; writeln (heap [1] ) ; end. 第十五届全国青少年信息学奥林匹克联赛初赛试题 ( 提高组 Pascal语言 二小时完成 ) ?? 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ?? 一( 单项选择题 (共10题,每题1.5分,共计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位带符号整数的二进制补码为1111111111101101。其对应的十进制整数应该是: 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) 0,1,00,11) B)( C)(0,10,110,111) D)(1,01,000,001) 8、快速排序平均情况和最坏情况下的算法时间复杂度分别为: 2A) 平均情况 O(nlog2n),最坏情况O(n) 2B) 平均情况 O(n), 最坏情况O(n) C) 平均情况 O(n), 最坏情况O(nlog2n) 2D) 平均情况 O(log2n), 最坏情况O(n) 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 10、全国信息学奥林匹克的官方网站为参与信息学竞赛的老师同学们提供相关的信息和资源,请问全国信 息学奥林匹克官方网站的网址是: A) ) C) ) xue.com/ 二( 不定项选择题 (共10题,每题1.5分,共计15分。每题正确答案的个数不少于1。多选或少选均 不得分)。 1、关于CPU下面哪些说法是正确的: A) CPU全称为中央处理器(或中央处理单元)。 B) CPU能直接运行机器语言。 C) CPU最早是由Intel公司发明的。 D) 同样主频下,32位的CPU比16位的CPU运行速度快一倍。 2、关于计算机内存下面的说法哪些是正确的: A) 随机存储器(RAM)的意思是当程序运行时,每次具体分配给程序的内存位置是随机而不确定 的。 B) 一般的个人计算机在同一时刻只能存/取一个特定的内存单元。 C) 计算机内存严格说来包括主存(memory)、高速缓存(cache)和寄存器(register)三个部分。 D) 1MB内存通常是指1024*1024字节大小的内存。 3、关于操作系统下面说法哪些是正确的: A. 多任务操作系统专用于多核心或多个CPU架构的计算机系统的管理。 B. 在操作系统的管理下,一个完整的程序在运行过程中可以被部分存放在内存中。 C. 分时系统让多个用户可以共享一台主机的运算能力,为保证每个用户都得到及时的响应通常会 采用时间片轮转调度的策略。 D. 为了方便上层应用程序的开发,操作系统都是免费开源的。 4、关于计算机网络,下面的说法哪些是正确的: A) 网络协议之所以有很多层主要是由于新技术需要兼容过去老的实现方案。 B) 新一代互联网使用的IPv6标准是IPv5标准的升级与补充。 C) TCP/IP是互联网的基础协议簇,包含有TCP和IP等网络与传输层的通讯协议。 D) 互联网上每一台入网主机通常都需要使用一个唯一的IP地址,否则就必须注册一个固定的域名 来标明其地址。 5、关于HTML下面哪些说法是正确的: A) HTML全称超文本标记语言,实现了文本、图形、声音乃至视频信息的统一编码。 B) HTML不单包含有网页内容信息的描述,同时也包含对网页格式信息的定义。 C) 网页上的超链接只能指向外部的网络资源,本网站网页间的联系通过设置标签来实现。 D) 点击网页上的超链接从本质上就是按照该链接所隐含的统一资源定位符(URL)请求网络资源或 网络服务。 6、若3个顶点的无权图G的邻接矩阵用数组存储为{{0,1,1},{1,0,1},{0,1,0}},假定在具体存储中顶点依次为: v,v,v 关于该图,下面的说法哪些是正确的: 123 A) 该图是有向图。 B) 该图是强连通的。 C) 该图所有顶点的入度之和减所有顶点的出度之和等于1。 D) 从v1开始的深度优先遍历所经过的顶点序列与广度优先的顶点序列是相同的。 7、在带尾指针(链表指针clist指向尾结点)的非空循环单链表中每个结点都以next字段的指针指向下一个节点。假定其中已经有2个以上的结点。下面哪些说法是正确的: A) 如果p指向一个待插入的新结点,在头部插入一个元素的语句序列为: p^.next:= clist^.next; clist^.next:= p; B) 如果p指向一个待插入的新结点,在尾部插入一个元素的语句序列为: p^.next:= clist; clist^.next:= p; C) 在头部删除一个结点的语句序列为: p:= clist^.next; clist^.next:= clist^.next^.next; dispose(p); D) 在尾部删除一个结点的语句序列为。 p:= clist; clist:= clist ^.next; dispose(p); 8、散列表的地址区间为0-10,散列函数为H(K)=K mod 11。采用开地址法的线性探查法处理冲突,并将关键字序列26,25,72,38,8,18,59存储到散列表中,这些元素存入散列表的顺序并不确定。假定之前散列表为空,则元素59存放在散列表中的可能地址有: A) 5 B) 7 C) 9 D) 10 9、排序算法是稳定的意思是关键码相同的记录排序前后相对位置不发生改变,下列哪些排序算法是稳定 的: A) 插入排序 B) 基数排序 C) 归并排序 D) 冒泡排序 10、在参加NOI系列竞赛过程中,下面哪些行为是被严格禁止的: A) 携带书写工具,手表和不具有通讯功能的电子词典进入赛场。 B) 在联机测试中通过手工计算出可能的答案并在程序里直接输出答案来获取分数。 C) 通过互联网搜索取得解题思路。 D) 在提交的程序中启动多个进程以提高程序的执行效率。 三(问题求解(共2题,每空5分,共计10分) 1(拓扑排序是指将有向无环图G中的所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ?E(G),则u在线性序列中出现在v之前,这样的线性序列成为拓扑序列。如下的有向无环图,对 其顶点做拓扑排序,则所有可能的拓扑序列的个数为 。 5 8 2 6 1 4 7 9 3 22(某个国家的钱币面值有1, 7, 7, 73共计四种,如果要用现金付清10015元的货物,假设买卖双方各种钱币的数量无限且允许找零,那么交易过程中至少需要流通张钱币。 四(阅读程序写结果(共4题,每题8分,共计32分) 1( var a, b: integer; function work(a, b: integer): integer; begin if a mod b <> 0 then work := work(b, a mod b) else work := b; end; begin read(a, b); writeln(work(a, b)); end. 输入:123 321 输出:_________ 2( var a, b: array[0..3] of integer; i, j, tmp: integer; begin for i := 0 to 3 do read(b[i]); for i := 0 to 3 do begin a[i] := 0; for j := 0 to i do begin inc(a[i], b[j]); inc(b[a[i] mod 4], a[j]); end; end; tmp := 1; for i := 0 to 3 do begin a[i] := a[i] mod 10; b[i] := b[i] mod 10; tmp := tmp * (a[i] + b[i]); end; writeln(tmp); end. 输入:2 3 5 7 输出:_______________ 3( const y = 2009; maxn = 50; var n, i, j, s: longint; c: array[0..maxn, 0..maxn] of longint; begin s := 0; read(n); c[0, 0] := 1; for i := 1 to n do begin c[i, 0] := 1; for j := 1 to i - 1 do c[i, j] := c[i-1, j-1] + c[i-1, j]; c[i, i] := 1; end; for i := 0 to n do s := (s + c[n, i]) mod y; write(s); end. 输入:17 输出: 4( var n, m, i, j, k, p: integer; a, b: array[0..100] of integer; begin read(n, m); a[0] := n; i := 0; p := 0; k := 0; repeat for j := 0 to i - 1 do if a[i] = a[j] then begin p := 1; k := j; break; end; if p <> 0 then break; b[i] := a[i] div m; a[i+1] := (a[i] mod m) * 10; inc(i); until a[i] = 0; write(b[0], '.'); for j := 1 to k - 1 do write(b[j]); if p <> 0 then write('('); for j := k to i - 1 do write(b[j]); if p <> 0 then write(')'); writeln; end. 输入:5 13 输出:_________ 五(完善程序 (前5空,每空2分,后6空,每空3分,共28分) 1((最大连续子段和)给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。 请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求 该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3, 2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。 var a: array[1..100] of integer; n, i, ans, len, tmp, beg: integer; begin read(n); for i := 1 to n do read(a[i]); tmp := 0; ans := 0; len := 0; beg := ? ; for i := 1 to n do begin if tmp + a[i] > ans then begin ans := tmp + a[i]; len := i - beg; end else if ( ? ) and (i - beg > len) then len := i - beg; if tmp + a[i] ? then begin beg := ? ; tmp := 0; end else ? ; end; writeln(ans, ' ', len); end. 2. (寻找等差数列) 有一些长度相等的等差数列(数列中每个数都为0~59的整数),设长度均为 L,将等差数列中的所有数打乱顺序放在一起。现在给你这些打乱后的数,问原先,L最大可能为多大,先 读入一个数n(1<=n<=60),再读入n个数,代表打乱后的数。输出等差数列最大可能长度L。 var hash: array[0..60] of integer; n, x, ans, maxnum, i: integer; function work(now: integer): boolean; var ok: boolean; first, second, delta, i: integer; begin while (( ? ) and (hash[now]=0)) do inc(now); if now > maxnum then begin work := true; exit; end; first := now; for second := first to maxnum do if hash[second] > 0 then begin delta := ? ; if first + delta * ? > maxnum then break; if delta = 0 then ok := ( ? ) else begin ok := true; for i := 0 to ans - 1 do ok := ? and (hash[first+delta*i]>0); end; if ok then begin for i := 0 to ans - 1 do dec(hash[first+delta*i]); if work(first) then begin work := true; exit; end; for i := 0 to ans - 1 do inc(hash[first+delta*i]); end; end; work := false; end; begin fillchar(hash, sizeof(hash), 0); read(n); maxnum := 0; for i := 1 to n do begin read(x); inc(hash[x]); if x > maxnum then maxnum := x; end; for ans := n downto 1 do if (n mod ans = 0) and ? then begin writeln(ans); break; end; end. 第十四届全国青少年信息学奥林匹克联赛初赛试题 ( 提高组 Pascal语言 二小时完成 ) ?? 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ?? 一、单项选择题(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案)。 1(在以下各项中,( )不是操作系统软件。 A(Solaris B(Linux C(Sybase D(Windows Vista E(Symbian 2(微型计算机中,控制器的基本功能是( )。 A(控制机器的各个部件协调工作 B(实现算数运算与逻辑运算 C(存储各种控制信息 D(获取外部信息 E(存放程序和数据 3(设字符串S=“Olympic”,S的非空子串的数目是( )。 A(29 B(28 C(16 D(17 E(7 4(完全二叉树有2*N-1的结点,则它的叶子结点数目是( )。 NA(N-1 B(2*N C(N D(2-1 E(N/2 5(将数组{8,23,4,16,77,-5,53,100}中元素从大到小按顺序排序,每次可以交换任意两个元素,最少要交换( )次。 A(4 B(5 C(6 D(7 E(8 6(设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a那么栈容量至少应该是( )。 A(6 B(5 C(4 D(3 E(2 7(与十进制数28.5625相等的四进制数是( ) A(123.21 B(131.22 C(130.22 D(130.21 E(130.20 8(递归过程和函数调用时,处理参数和返回地址,通常使用一种称为( )的数据结构。 A(队列 B(多维数组 C(线性表 D(链表 E(栈 9(TCP/IP 是一组构成互联网基础的网络协议,字面上包括两组协议:传输控制协议(TCP)和网际互联协议(IP)。TCP/IP协议把Internet网络系统描述成具有4个层次功能的网络模型,其中提供源节点和目的节点之间的信息传输服务,包括寻址和路由器选择等功能的是( )。 A(链路层 B(网络层 C(传输层 D(应用层 E(会话层 10(对有序数组{5,13,19,21,37,56,64,75,88,92,100}进行二分查找,等概率情况下,查找成功的平均查找长度(平均比较次数)是( )。 A(35/11 B(34/11 C(33/11 D(32/11 E(34/10 二、不定项选择题(共10题,每题1.5分,共计15分。每题正确答案的个数大于或等于1。多选或少选均不得分)。 11(下列关于图灵的说法正确的有( )。 A(图灵奖是美国计算机协会与1966年设立的,专门鼓励那些对计算机做出重要贡献的个人 B(图灵奖有“计算机界诺贝尔奖”之称。 C(迄今为止,还没有华裔计算机科学家获此殊荣。 D(图灵奖的名称取自计算机科学先驱、英国科学家阿兰?图灵。 12(计算机在工作过程中,若突然停电,( )中不会丢失信息不会丢失。 A(硬盘 B(CPU C(ROM D(RAM 13(若A=True,B=False,C=True,D=False,以下逻辑运算表达式真的有( )。 A((A?B)V(C?DV?A) B(((?A?B)VC)??B C((BVCVD)VD?A D(A?(DV?C)?B 14(Web2.0是近年来互联网热门概念之一,其核心是互动与分享。下列网站中,( )是典型的Web2.0的应用。 A(Sina B(Flickr C(Yahoo D(Google 15((2008)+ (5B) 的结果是()。 1016 A((833) B((2099) C((4063) D((100001100011)16 1082 16(二叉树T,已知其先序遍历是1 2 4 3 5 7 6(数字为节点编号,以下同),后序遍历是4 2 7 5 6 3 1,则该二叉树的中根遍历是( ) A(4 2 1 7 5 3 6 B(2 4 1 7 5 3 6 C(4 2 1 7 5 6 3 D(2 4 1 5 7 3 6 17(面向对象的程序设计(Object-Oriented Programming)是一种程序设计的方法论,它将对象作为程序设计的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性、和扩展性。下面关于面向对象的程序设计说法中正确的是( )。 A(面向对象的程序设计方法通常采用自顶向下的设计方法进行设计。 B(面向对象的程序设计方法具有继承性(inheritance)、封装性(encapsulation)、多态性(polymorphism)等几大特点。 C(支持面向对象特性称为面向对象的编程语言,目前较为流行的有C++,JAVA,C#等。 D(面向对象的程序设计的雏形来自于Simula语言,后来在SmallTalk语言的完善和标准化的过程中得到更多的扩展和对以前的思想的重新注解。至今,SmallTalk语言仍然被视为面向对象的基础。 18(设T是一棵有n个定点的树,以下说法正确的是( )。 A(T是联通的,无环的 B(T是联通的,有n-1条边 C(T是无环的,有n-1条边 D(以上都不对 19(NOIP竞赛推荐使用的语言环境有( )。 A(Dev-C++ B(Visual C++ C(Free Pascal D(Lazarus 20(在下列防火墙(Firewall)的说法中,正确的有( )。 A(防火墙是一项协助确保信息安全的设备,其会依照特定的规则,允许或是限制数据通过 B(防火墙可能是一台专属硬件或是安装在一般硬件上的一套软件 C(网络层防火墙可以视为一种IP数据包过滤器,只允许符合特定规定的数据包通过,其余的一概禁止穿越防火墙 D(应用层防火墙是在TCP/IP的“应用层”上工作,可以拦截进出某应用程序的所有数据包 三、问题求解(共2题,每题5分,共计10分) 1(有6个城市,任何两个城市之间有一条道路连接,6个城市之间两两之间的距离如下表表示,则城市1到城市6的最短距离为____________。 城市1 城市2 城市3 城市4 城市5 城市6 城市1 0 2 3 1 12 15 城市2 2 0 2 5 3 12 城市3 3 2 0 3 6 5 城市4 1 5 3 0 7 9 城市5 12 3 6 7 0 2 城市6 15 12 5 9 2 0 2(书架上有21本书,编号从1 到 21 从中选4 本,其中每两本的编号都不相邻的选法一共有___________________种。 四、阅读程序写结果(共4题,每题8分,共计32分)。 1(var i,a,b,c,d:integer; f:array[0..3] of integer; begin for i:=0 to 3 do read(f[i]); a:=f[0]+f[1]+f[2]+f[3]; a:=a div f[0]; b:=f[0]+f[2]+f[3]; b:=b div a; c:=(b*f[1]+a) div f[2]; d:=f[(b div c) mod 4]; if (f[(a+b+c+d) mod 4]>f[2]) then begin a:=a+b; writeln(a) end else begin c:=c+d; writeln(c); end; end. 输入: 9 19 29 39 输出:_______________________________ 2(var a,b,c:integer; Procedure foo(a,b,c:integer); begin if a>b then foo(c,a,b) else writeln(a,',',b,',',c) end; begin readln(a,b,c); foo(a,b,c); end. 输入:2 1 3 输出:_________________ 3(procedure f(a,b,c:integer); begin write(a,b,c,'/'); if (a=3)and(b=2)and(c=1) then exit; if (b=ord('A')) and (ord(s[i])<=ord('Z')) then s:=chr(ord(s[i])-ord('A')+ord('a')); for i:=1 to len do if (ord(s[i])b) then begin t:=a; a:=b; b:=t; end; end; Function FindKth(left,right,n:integer):integer; Var tmp,value,i,j:integer; begin if left=right then exit(left); tmp:=random(right-left)+left; swap(a[tmp],a[left]); value:=____?_____ i:=left; j:=right; while in then begin dec(j); exit(______?________);end; exit(i); end; var i:integer; begin randomize; ans:=-1; m:=5; for i:=1 to m do read(a[i]); read(n); ans:=FindKth(1,m,n); writeln(a[ans]); end. 2((矩阵中的数字)有一个n*n(1?n?5000)的矩阵a,对于1?i0 do begin if a[n,j]k do begin while (___?_____) and (i>1) do dec(i); while (___?_____) and (j<=n) do inc(j); end; _______?________ _______?________ end; var i,j:integer; begin read(n); for i:=1 to n do for j:=1 to n do read(a[i,j]); read(k); FindKPosition; writeln(answerx,' ',answery); end. 第十三届全国青少年信息学奥林匹克联赛初赛试题 ( 提高组 Pascal 语言 二小时完成 ) ?? 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ?? 一、 单项选择题 (共 10 题,每题 1.5 分,共计 15 分。每题有且仅有一个正确答案.)。 1. 在以下各项中。( )不是 CPU 的组成部分。 A. 控制器 B. 运算器 C. 寄存器 D. 主板 E. 算术逻辑单元(ALU) 2. 在关系数据库中, 存放在数据库中的数据的逻辑结构以( )为主。 A. 二叉树 B. 多叉树 C. 哈希表 D. B+树 E. 二维表 3.在下列各项中,只有( )不是计算机存储容量的常用单位。 A. Byte B. KB C. MB D. UB E. TB 4(ASCII码的含义是( )。 十进制转换码 B. 美国信息交换标准代码 C. 数字的二进制数码 A. 二— D. 计算机可处理字符的唯一编码 E. 常用字符的二进制编码 5(在 Pascal 语言中,表达式 (23 or 2 xor 5)的值是( ) A. 18 B. 1 C.23 D.32 E.24 6(在 Pascal 语言中,判断整数a 等于 0 或b等于 0或c等于0 的正确的条件表达式是( ) A. not ((a<>0) or (b<>0) or (c<>0)) B. not ((a<>0) and (b<>0) and (c<>0)) C. not ((a=0) and (b=0)) or (c=0) D.(a=0) and (b=0) and (c=0) E. not ((a=0) or (b=0) or (c=0)) 7. 、C的3根细柱, 在A柱上放有10个直径相同中间有孔的圆盘, 从地面上有标号为A、B 上到下次依次编号为1, 2, 3, „„,将A柱上的部分盘子经过B柱移入C柱, 也可以在B柱上暂存。如果B柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么, 在C柱上, 从下到上的盘子的编号为( )。 A. 2 4 3 6 5 7 B. 2 4 1 2 5 7 C. 2 4 3 1 7 6 D. 2 4 3 6 7 5 E. 2 1 4 3 7 5 8. 与十进制数17.5625相对应的8进制数是( )。 A. 21.5625 B. 21.44 C. 21.73 D. 21.731 E. 前4个答案都不对 9. 欧拉图G是指可以构成一个闭回路的图,且图G的每一条边恰好在这个闭回路上出现一次(即一笔画成)。在以下各个描述中, 不一定是欧拉图的是:( )。 A. 图G中没有度为奇数的顶点 B. 包括欧拉环游的图(欧拉环游是指通过图中每边恰好一次的闭路径) C. 包括欧拉闭迹的图(欧拉迹是指通过途中每边恰好一次的路径) D. 存在一条回路, 通过每个顶点恰好一次 E. 本身为闭迹的图 10. 一个无法靠自身的控制终止的循环称为“死循环”,例如在C语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。下面关于死循环的说法中, 只有( )是正确的。 A. 不存在一种算法, 对任何一个程序及相应的输入数据, 都可以判断是否会出现死循环, 因而, 任何编译系统都不做死循环检查 B. 有些编译系统可以检测出死循环 C. 死循环属于语法错误, 既然编译系统能检查各种语法错误, 当然也能检查出死循环 D. 死循环与多进程中出现的“死锁”差不多,而死锁是可以检测的,因而,死循环也是可以检测的 E. 对于死循环,只能等到发生时做现场处理, 没有什么更积极的手段 二、 不定项选择题 (共 10 题,每题 1.5 分,共计 15 分。每题正确答案的个数大于或等于 1。多选或少选均不得分)。 11. 设A=B=true,C=D=false,以下逻辑运算表达式值为真的有( )。 A. (,A?B)?(C?D?A) B. , ( ( (A?B)?C)?D) C. A?(B?C?D)?D D. (A?(D?C)) ?B 12. 命题“P?Q”可读做P蕴含Q, 其中P、Q是两个独立的命题. 只有当命题P成立而命题Q不成立时, 命题"P?Q"的值为false, 其它情况均为true. 与命题"P?Q"等价的逻辑关系式是( )。 A. , P?Q B. P?Q C. , (P?Q) D. ,(,Q?P ) 13. (2070)+(34)( )。 168的结果是 A. (8332) B. (208C) 1016 C. (100000000110) D. (20214) 28 14. 已知7个节点的二叉树的先根遍历是1 2 4 5 6 3 7(数字为结点的编号,以下同), 后根遍历是4 6 5 2 7 3 1, 则该二叉树的可能的中根遍历是( ) A. 4 2 6 5 1 7 3 B. 4 2 5 6 1 3 7 C. 4 2 3 1 5 4 7 D. 4 2 5 6 1 7 3 15. 冗余数据是指可以由其他数据导出的数据,例如,数据库中已存放了学生的数学、语文、和英语的三科成绩,如果还存放三科成绩的总分,则总分就可以看做冗余数据。冗余数据往往会造成数据的不一致,例如上面4个数据如果都是输入的,由于操作错误使总分不 等于三科成绩之和,就会产生矛盾。下面关于冗余数据的说法中, 正确的是( )。 A. 应该在数据库中消除一切冗余数据 B. 与用高级语言编写的数据处理系统相比, 用关系数据库编写的系统更容易消除冗余数据 C. 为了提高查询效率, 在数据库中可以适当保留一些冗余数据, 但更新时要做相容性检验 D. 做相容性检验会降低效率, 可以不理睬数据库中的冗余数据 16.在下列各软件中,属于 NOIP 竞赛(复赛)推荐使用的语言环境有( )。 A. gcc B. g++ C. Turbo C D. free pascal 17. 以下断电之后将仍能保存数据的有( )。 A. 硬盘 B. ROM C. 显存 D. RAM 18. 在下列关于计算机语言的说法中,正确的有( )。 A. 高级语言比汇编语言更高级, 是因为它的程序的运行效率更高 B. 随着Pascal、C等高级语言的出现, 机器语言和汇编语言已经退出了历史舞台 C. 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上 D. C是一种面向过程的高级计算机语言 19. 在下列关于算法复杂性的说法中, 正确的有( )。 A. 算法的时间复杂度,是指它在某台计算机上具体实现时的运行时间 B. 算法的时间复杂度,是指对于该算法的一种或几种主要的运算, 运算的次数与问题的规模之间的函数关系 C. 一个问题如果是NPC类的, 就意味着在解决该问题时, 不存在一个具有多项式时间复杂度的算法. 但这一点还没有得到理论上证实,也没有被否定 D. 一个问题如果是NP类的,与C有相同的结论 20. 近20年来, 许多计算机专家都大力推崇递归算法,认为它是解决较复杂问题的强有力的工具. 在下列关于递归的说法中, 正确的是( )。 A. 在1977年前后形成标准的计算机高级语言"FORTRAN77"禁止在程序使用递归, 原因之一是该方法可能会占用更多的内存空间. B. 和非递归算法相比, 解决同一个问题, 递归算法一般运行得更快一些 C. 对于较复杂的问题, 用递归方式编程往往比非递归方式更容易一些 D. 对于已定义好的标准数学函数sin(x), 应用程序中的语句“y=sin(sin(x));”就是一种递归调用 三(问题求解(共 2 题,每题 5 分,共计 10 分) 1(给定n个有标号的球,标号依次为1,2,„,n。将这n个球放入r个相同的盒子里,不允许有空盒,其不同放置方法的总数记为S(n,r)。例如,S(4,2)=7,这7种不同的放置方法依次为{(1) , (234)} , {(2) , (134)} , {(3) , (124)} , {(4) , (123)} , {(12) , (34)} , {(13) , (24)} , {(14) , (23)}。当n=7,r=4时,S(7,4)= 。 2(N个人在操场里围成一圈,将这N个人按顺时针方向从1到N编号,然后从第一个人起,每隔一个人让下一个人离开操场,显然,第一轮过后,具有偶数编号的人都离开了操场。依次做下去,直到操场只剩下一个人,记这个人的编号为J(N),例如,J(5)=3,J(10)=5,等等。 mm则J(400)= 。(提示:对N=2+r进行分析,其中0?r<2)。 题,每题 8 分,共计 32 分) 四(阅读程序写结果(共 4 1. program s401; var p,q:array[0..5] of integer; i,x,y:integer; begin y:=20; for i:=0 to 4 do read(p[i]); readln; q[0]:=(p[0]+p[1])+(p[2]+p[3]+p[4]) div 7; q[1]:=p[0]+p[1] div ((p[2]+p[3]) div p[4]); q[2]:=p[0]*p[1] div p[2]; q[3]:=q[0]*q[1]; q[4]:=q[1]+q[2]+q[3]; x:=(q[0]+q[4]+2)-p[(q[3]+3) mod 4]; if (x>10) then y:=y+(q[1]*100-q[3]) div (p[p[4] mod 3]*5) else y:=y+20+(q[2]*100-q[3]) div (p[p[4] mod 3]*5); writeln(x,',',y); end. /*注:本例中,给定的输入数据可以避免分母为 0 或下标越界。*/ 输入:6 6 5 5 3 输出: 2. program s402; var a,b:integer; x,y:^integer; procedure fun(a,b:integer); var k:integer; begin k:=a; a:=b; b:=k; end; begin a:=3; b:=6; x:=@a; y:=@b; fun(x^,y^); write('No.1:',a,',',b,' '); fun(a,b); writeln('No.2:',a,',',b); end. 输出: 3. program S403; var a1:array[1..50] of integer; ,t,t2,n,n2:integer; var i,j begin n:=50; for i:=1 to n do a1[i]:=0; n2:=round(sqrt(n)); for i:=2 to n2 do if(a1[i]=0) then begin t2:=n div i; for j:=2 to t2 do a1[i*j]:=1; end; t:=0; for i:=2 to n do if (a1[i]=0) then begin write(i:4); inc(t); if(t mod 10=0) then writeln; end; writeln; end. 输出: 4. program S404; const n=12; ch2:array[0..12] of char =('q','A','S','O','R','T','E','X','A','M','P','L','E'); var k:integer; ch:array[0..12] of char; procedure shift(k,n:integer); var v:char; j:integer; begin v:=ch[k]; j:=k+k; while (j<=n) do begin if (j=bound) then begin writeln('Data error!'); [ ? ]; end; b:=1; for i:=1 to n do begin p:=0; b:=b*2; for[ ? ] to m do if ([ ? ] ) then p:=1-p; gr[i]:=p; end; for i:=n[ ? ] do write(gr[i]); writeln; end. 2((连续邮资问题)某国发行了n种不同面值的邮票,并规定每封信上最多允许贴m张邮票。在这些约束下,为了能贴出{1,2,3,„,maxvalue}连续整数集合的所有邮资,并使maxvalue的值最大,应该如何设计各邮票的面值?例如,当n=5和m=4时,面值设计为(1,3,11,15,32),可使maxvalue达到最大值70(或者说,用这些面值的1至4张邮票可以表示不超过70的所有邮资,但无法表示邮资71)。而用其他面值的1至4张邮票如果可以表示不超过k的所有邮资,必有k?70) 下面是用递归回溯求解连续邮资问题的程序。数组x[1:n]表示n种不同的邮票面值,并约定各元素按下标是严格递增的。数组bestx[1:n]存放使maxvalue达到最大值的邮票面值(最优解),数组y[maxl]用于记录当前已选定的邮票面值x[1:i]能贴出的各种邮资所需的最少邮票张数。请将程序补充完整。 program S502; const NN=20; maxint=30000; maxl=500; var bestx,x:array [0..NN] of integer; y:array [0..maxl] of integer; j,n,m,maxvalue:integer; procedure result; var j:integer; begin writeln('max=',maxvalue); for j:=1 to n do write(bestx[j]:4); writeln; end; procedure backtrace(i,r:integer); var j,k:integer; z: array[0..maxl] of integer; begin for j:=0 to[ ? ]do if (y[j]n) then begin if (r-1>maxvalue) then begin maxvalue:=[ ? ] ; for j:=1 to n do bestx[j]:=x[j]; end; exit; end; for k:=0 to maxl do z[k]:=y[k]; for j:=[ ? ] to r do begin x[i]:=j; [ ? ]; for k:=0 to maxl do y[k]:=z[k]; end; end; begin maxvalue:=0; writeln('input n,m:'); readln(n,m); for j:=1 to maxl do y[j]:=maxint; y[0]:=0; x[0]:=0; x[1]:=1; backtrace(2,1); result; end. 答案 CCF NOIP2011提高组(Pascal语言)参考答案与评分标准 一、单项选择题(共10题,每题1.5分,共计15分) 1 2 3 4 5 6 7 8 9 10 B B A D B A C D B A 二、不定项选择题(共10题,每题1.5分,共计15分,多选或少选均不得分) 1 2 3 4 5 6 7 8 9 10 CD ABCD AB BC BC ABD CD A BCD ABC 三、问题求解(共2题,每题5分,共计10分) (9 2(4 1 四、阅读程序写结果(共4题,每题8分,共计32分) 1(3 2(1 2 5 13 34 3(150 4(57344 五、完善程序(第1题,每空2分,第2题,每空3分,共计28分) (说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1(? ans.num[i + j - 1] ? ans.num[i] := ans.num[i] mod 10; ? ans.num[i] + a.num[i] + b.num[i]; ? ans.num[i] mod 2 (或 ans.num[i] and 1) ? inc(ans.len) (或 ans.len := ans.len + 1) ? a.len < b.len ? ord('0')(或48) ? times(middle, middle), target 2(? inc(num) (或 num := num + 1) ? j := i ? solve(left, j - 1, deep + 1) ? solve(j + 1, right, deep + 1) NOIP2010(第十六届)初赛提高组(C语言、PASCAL语言)参考答案与评分标准 一、单项选择题(共10题,每题1.5分,共计15分) 1 2 3 4 5 6 7 8 9 10 C A A D B D C B C B 二、不定项选择题(共10题,每题1.5分,共计15分,多选或少选均不得分) 1 2 3 4 5 6 7 8 9 10 ACD AD ABD AC B B D D BCD ABC 三、问题求解(共3题,每题5分,共计15分) 1(yyxy xx yyxy xyx xx xyx 2(12 3(18 四、阅读程序写结果(共4题,每题7分,共计28分) 1(16 2(1 2 3 5 6 7 9 10 14 3(4 4(1 6 9 5 4 8 3 2 7 五、完善程序(第1空2分,其余10空,每空2.5分,共计27分) (说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查) 1(? num <= 2(或num < 3 或num = 2) ? go(LEFT_TO_RIGHT) ? pos[i] = LEFT(或LEFT = pos[i]) ? time[i] + go(RIGHT_TO_LEFT)(或go(RIGHT_TO_LEFT) + time[i]) ? pos[i] := LEFT 本小题中,LEFT可用true代替,LEFT_TO_RIGHT可用true代替,RIGHT_TO_LEFT可用false代替。 2(? opt[k] ? home[r] := k ? j := i + i(或j := 2 * i 或j := i * 2) ? swap(i, j)(或swap(j, i)) ? value[i] + heap[1](或heap[1] + value[i]) ? i - m NOIP2009(第十五届)初赛提高组(C语言、PASCAL语言)参考答案与评分标准 一、单项选择题:(每题1.5分) 1. C 2. A 3. D 4. B 5. D 6. B 7. B 8. A 9. A 10. C 二、 不定项选择题 (共10题,每题1.5分,共计15分。每题正确答案的个数大于或等于1。多选或少选 均不得分)。 1. AB 2. BD 3. BC 4. C 5. BD 6. ABD 7. AC 8. ABC 9. ABCD 10. ACD 三、问题求解:(共2题,每空5分,共计10分) 1(432 2(35 四、阅读程序写结果(共4题,每题8分,共计32分) 1. 3 2. 5850 3. 487 (杨辉三角) 4. 0.(384615)(分数变小数) 五(完善程序 (前5空,每空2分,后6空,每空3分,共28分) (说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学 委员会审查) 1. ? 0 ? tmp+a[i]=ans或者 a[i]+tmp=ans 或者ans=a[i]+tmp等 ? <0 ? i ? inc(tmp, a[i])或者tmp := tmp+a[i] 2. ? now<=maxnum 或者 not(now>maxnum) first-second ? ? (ans-1) ? hash[first]>=ans 或者 hash[second]>=ans 或者 hash[first+delta]>=ans ? ok ? work(0) NOIP2008年(第十四届)提高组(Pascal语言)参考答案 一、单项选择题:(每题1.5分) 1. C 2. A 3. B 4. C 5. B 6. D 7. D 8. E 9. B 10. C 二、 不定项选择题 (共10题,每题1.5分,共计15分。每题正确答案的个数大于或等 于1。多选或少选均不得分)。 11. ABD 12. AC 13. BC 14. B 15. ABC 16. ABD 17. BCD 18. ABC 19. ACD 20. ABCD 三、问题求解:(共2题,每题5分,共计10分) 1(7 2(3060 四、阅读程序写结果(共4题,每题8分,共计32分) 1. 23 (信心题) 2. 1,3,2 (简单递归) 3. 132/213/231/312/321/ (全排列) 4. defghijxyzabc/hfizxjaybcccc (字符串替换) 五(完善程序 (前6空,每空3分,后5空,每空2分,共28分) (说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不 一定上报科学委员会审查) 1. ? a[left] ? a[j] < value (或a[j] <= value) ? a[i] > value (或a[i] >= value) ? a[i] := value; ? i,right,n ? FindKth(left, i, n) 2. ? inc(j); (或者j := j+1;) ? a[i,j] > k ? a[i,j] < k ? answerx := i; ? answery := j; NOIP2007年(第十三届)提高组(Pascal语言)参考答案 一、单项选择题 1. D 2. E 3. D 4. B 5. A 6. B 7. D 8. B 9. D 10. A 二、 不定项选择题 11. ABC 12. AD 13. ABD 14. ABD 15. BC 16. ABD 17. AB 18. CD 19. BC 20. AC 三、问题求解 1(350 2(289 四、阅读程序写结果 1 129,43 2 No.1:3,6 No.2:3,6 3 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 4 No.1: XTORSEAAMPLE No.2: AAEELMOPRSTX 五、完善程序 (前5空,每空2分,后6空,每空3分,共28分) (说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证, 不一定上报科学委员会审查) 1 ? bound*2 ? exit ? j:=0 ? (j mod b-(b div 2))=0 ? downto 1 2 ? x[i-2]*(m-1) ? j+x[i-1]*k ? j+x[i-1]*k (同2) ? r-1 ? x[i-1]+1 ? backtrace(i+1,r)
/
本文档为【2007-2011年noip初赛提高组试题及答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索