1 / 9
文档名称:

信息学奥赛初赛试题.docx

格式:docx   大小:28KB   页数:9页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

信息学奥赛初赛试题.docx

上传人:mazhuangzi1 2022/10/24 文件大小:28 KB

下载得到文件列表

信息学奥赛初赛试题.docx

相关文档

文档介绍

文档介绍:该【信息学奥赛初赛试题 】是由【mazhuangzi1】上传分享,文档一共【9】页,该文档可以免费在线阅读,需要了解更多关于【信息学奥赛初赛试题 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。第十六届全国青少年信息学奥林匹克联赛初赛试题
(提高组Pascal语言二小时完成)
••全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效••
(共10题,,共计15分。每题有且仅有一个正确答案。)
()

一个字节(byte)由( )个二进制组成。
8
以下逻辑表达式的值恒为真的是( )。
PVCnPAQ)V(nPAnQ) (qPAQ)V(PAnQ)
)V(nPAQ)「QV(PA「Q)VGPA「Q)
Linux下可执行文件的默认扩展名是( )。

如果在某个进制下等式7*7=41成立,那么在该进制下等式12*12=()也成立。

提出“存储程序”的计算机工作原理的是()。
••摩尔 ••诺依曼
前缀表达式“+3*2+5 12”的值是()°
&主存储器的存取速度比中央处理器(CPU)的工作速度慢的多,从而使得后者的效率受到影响。而根据局部性原理,CPU所访问的存储单元通常都趋于一个较小的连续区域中。于是,为了提高系统整体的执行效率,在CPU中引入了( )oA•寄存器
完全二叉树的顺序存储方案,是指将完全二叉树的结点从上到下、从左到右依次存放到一个顺序结构的
数组中。假定根结点存放在数组的1号位置上,则第k号结点的父结点如果存在的话,应当存放在数组中的()号位置。 + D.(k+l)/2
以下竞赛活动中历史最悠久的是( )°
(共10题,,共计15分。每题正确答案的个数不少于1。多选或少选均不得分)。
元素Rl、R2、R3、R4、R5入栈的顺序为Rl、R2、R3、R4、R5。如果第1个出栈的是R3,那么第5个出
栈的可能是()
Pascal语言,C语言和C++语言都属于( )°A•
语言
原地排序是指在排序过程中(除了存储待排序元素以外的)辅助空间的大小与数据规模无关的排序算
法。以下属于原地排序的有( )。 D.
选择排序
,所能表示的最小整数和最大整数的绝
对值相同
,若在最高位产生进位,则表示运算
溢出
一颗二叉树的前序遍历序列是ABCDEFG,后序遍历序列是CBFEGDA,则根结点的左子树的结点个数可能
是()。
在下列HTML语句中,可以正确产生一个指向N01官方网站的超链接的是( )。
〈aurl二””〉欢迎访问NOI网站〈/a〉
〈ahref二””〉欢迎访问NOI网站〈/a〉
〈a〉〈/a〉
<aname””〉欢迎访问NOI网站〈/a〉
关于拓扑排序,下列说法正确的是()。

B•对同一个图而言,拓扑排序的结构是唯一的
拓扑排序中入度为0的结点总会排在入度大于0的结点的前面
拓扑排序结果序列中的第一个结点一定是入度大于0的点
一个平面的法线是指与该平面垂直的直线。过点(1,1,1)、(0,3,0)、(2,0,0)的平面的法线是()。
(1,1,1)、(2,3,3)的直线 (1,1,1)、(3,2,1)的直线
(0,3,0)、(-3,1,1)(2,0,0)、(5,2,1)的直线
9•双向链表中有两个指针域llink和rlink,分别指向该结点的前驱及后继。设p指向链表中的一个结点,他的左右结点均为非空。现要求删除结点p,则下列语句序列中正确的是( )。
p-〉rlink-〉llink=p-〉rlink;
p-〉llink-〉rlink=p-〉llink;deletep;
p-〉llink-〉rlink=p-〉rlink;
p-〉rlink-〉llink=p-〉llink;deletep;
p-〉rlink-〉llink=p-〉llink;
p-〉rlink-〉llink-〉rlink=p-〉rlink;deletep;
p-〉llink-〉rlink=p-〉rlink;
p-〉llink-〉rlink-〉link=p-〉llink;deletep;
(2010年)发生的事件有()。
惠普实验室研究员VinayDeolalikar自称证明了PHNP
英特尔公司收购计算机安全软件公司迈克菲(McAfee)
苹果公司发布iPhone4手机
三、问题求解
。在编码的过程中,开始时只有一部基础构造元素的编码词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的编码会被追加到词典中,并用于后继信息的编码。
举例说明,考虑一个待编码的信息串:“xyxyyyyxyx”。初始词典只有3个条目,第一个为x,编码为1;第二个为y,编码为2;第三个为空格,编码为3;于是串“xyx”的编码为1-2T(其中-为编码分隔符),加上后面的一个空格就是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]ofinteger;
begin
readln(n,m);
fori:=1tondo
read(data[i]);
fori:=1tondo
begin
cnt:=0;
forj:=1tondo
if(data[i]<data[j])or((data[j]=data[i])and(j<i))
theninc(cnt);
ifcnt=m
thenwriteln(data[i]);
end;
end.
输入
52
96-801687
输出:
2.
const
size=100;
var
na,nb,i,j,k:integer;
a,b:array[1..size]ofinteger;
begin
readln(na);
fori:=1tonado
read(a[i]);
readln(nb);
fori:=1tonbdo
read(b[i]);
i:=1;
j:=1;
while(i<=na)and(j<=nb)do
begin
ifa[i]<=b[j]thenbegin
write(a[i],'');inc(i);
endelsebeginwrite(b[j],'');inc(j);
end;
end;
ifi<=nathen
fork:=itonadowrite(a[k],'');
ifj<=nbthen
fork:=jtonbdowrite(b[k],'');
end.
输入
5
3579
4
61014
输出:
3.
const
num=5;
var
n:integer;
functionr(n:integer):integer;var
:integer;
begin
ifn<=numthen
begin
r:=n;
exit;
end;
fori:=1tonumdoifr(n-i)<0thenbegin
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]ofinteger;
map:array[1..size,1..size]ofboolean;found:boolean;
functionsuccessful:boolean;
var
i:integer;
begin
fori:=1tondo
ifnotmap[r[i]][r[imodn+1]]thenbegin
successful:=false;
exit;
end;
successful:=true;
end;
proceduresa,b:integer);
var
t:integer;
begin
t:=a;
a:=b;
b:=t;
end;
procedureperm(left,right:integer);
var
i:integer;
begin
iffound
thenexit;
ifleft>right
thenbegin
ifsuccessful
thenbegin
fori:=1tondowriteln(r[i],'');
found:=true;
exit;
end;
fori:=lefttorightdo
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);fori:=1tomdo
begin
readln(x,y);
map[x][y]:=true;
map[y][x]:=true;
end;
fori:=1tondo
r[i]:=i;
found:=false;
perm(1,n);
ifnotfound
thenwriteln('No
soloution');
end.
输入:
912
12
3
4
5
6
1
17
27
8
8
9
9
输出:
五、完善程序
(过河问题)在一个月黑风高的夜晚,有一群人在河的右岸,,过桥时必须借照灯光来照明,不幸的是,,独木桥上最多能承受两个人同时经过,,,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥所花费的时间•现在输入N(2〈=N〈1000)和这N
end;
个人单独过桥需要的时间,请计算总共最少需要多少时间,他们才能全部到达河左岸.
例如,有3个人甲、乙、丙,他们单独过桥的时间分别为124,:甲乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然后甲,丙在一起过桥到河的左岸,总时间为2+1+4=
SIZE=100;
INFINITY=10000;
LEFT=true;
RIGHT=false;
LEFT_TO_RIGHT=true;
RIGHT_TO_LEFT=false;
var
n,i:integer;
time:array[1..Size]ofinteger;pos:array[1..Size]ofBoolean;
functionmax(a,b:integer):integer;begin
ifa>bthen
max:=a
else
max:=b;
end;
functiongo(stage:boolean):integer;var
i,j,num,tmp,ans:integer;begin
if(stage=RIGHT_TO_LEFT)thenbegin
num:=0;
ans:=0;
fori:=1tondo
ifpos[i]=Rigntthenbegin
inc(num);
iftime[i]>ansthen
ans:=
time[i];
end;
if then
begin
go:=ans;
exit;
end;
ans:=INFINITY;
fori:二1ton-1do
ifpos[i]=RIGHTthen
forj:=i+1tondo
ifpos[j]=RIGHTthenbeginpos[i]:=LEFT;pos[j]:=LEFT;
tmp:=max(time[i],time[j])+ ;
iftmp<ansthenans:=tmp;pos[i]:=RIGHT;pos[j]:=RIGHT;
end;
go:=ans;
end
elseif(stage=LEFT_TO_RIGHT)
thenbegin
ans:=INFINITY;
fori:=1tondoif then
begin
pos[i]:=RIGHT;tmp:= ;
iftmp<ansthenans:=tmp;
end;
go:=ans;
end
elsego:=0;
end;
begin
readln(n);
fori:=1tondo
beginread(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
,r,i:integer;
value,heap,pos,home,opt:array[l..SIZElofinteger;
//heap[i]表示用顺序数组存储的堆heap中第i个元素的值
//pos[i]表示opt[i]在堆heap中的位置,即heaplpos[i]]=opt[i]
//home[i]表示heap[i]在序列opt中的位置,即opt[home[i]]=heap[i]
procedureswap(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;
procedureadd(k:integer);
//在堆中插入opt[k]
var
i:integer;
begin
inc(r);
heap[r]:二①
pos[k] :=r;

while(i>1)and(heap[i]<heap[idiv_2])do
begin
swap(i,idiv2);
i:=idiv2;
end;
end;
procedureremove(k:integer);
//在堆中删除opt[k]
var
i,j:integer;
begin
i:=pos[k];
swap(i,r);
dec(r);
ifi=r+1then
exit;
while(i>1)and(heap[i] <heap[idiv2])do
begin
swap(i,idiv2);
i:=idiv2;
end;
whilei+i<=rdo
begin
if(i+i+1<=r)and(heap[i+i+1]<heap[i+i])thenj:=i+i+l
else

ifheap[i] >heap[j]then
begin

i:=j
end
else
break;
end;
end;
begin
readln(n,m);
fori:=1tondo
read(value[i]);
r:=0;
fori:=1tomdo
begin
opt[il:=value[i];
add(i);
end;
fori:=m+1tondobegin
opt[i]:= ⑤
remove( ⑥ )
add(i);
end;
writeln(heap[1]);
end.
第十六届全国青少年信息学奥林匹克联赛初赛答案
、单项选择题(共10题,,共计15分)
1
23
4 5 6
7
8 9 10
C
AA
DBD
C
BCB

不定项选择题(共10题,
,
共计15分,多选或少选均不得分)
1
2
3 4
5
6 7 8
9 10
ACD
AD
ABD AC
B
BDD
BCD ABC
三、 问题求解(共3题,每题5分,共计15分)
yyxyxxyyxyxyxxxxyx
四、 阅读程序写结果(共4题,每题7分,共计28分)
2.**********
五、 完善程序(第1空2分,其余10空,,共计27分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1.①num<=2(或num<3或num=2)
go(LEFT_T0_RIGHT)
pos[i]=LEFT(或LEFT=pos[i])
time[i]+go(RIGHT_T0_LEFT)(或go(RIGHT_T0_LEFT)+time[i])
pos[i]:=LEFT
本小题中,LEFT可用true代替,LEFT_T0_RIGHT可用true代替,RIGHT_T0_LEFT可用false代替。
①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