PDF文档公众号回复关键字:20240815
NOIP 2017 普及组 基础题4
16 对于入栈顺序为 a,b,c,d,e,f,g的序列,下列( )不可能是合法的出栈序列
A a,b,c,d,e,f,g
B a,d,c,b,e,g,f
C a,d,b,c,g,f,e
D g,f,e,d,c,b,a
17 设 A 和 B 是两个长为 n 的有序数组,现在需要将 A和 B合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做( )次比较
A n^2
B n logn
C 2n
D 2n-1
18 从( )年开始,NOIP 竞赛将不再支持 Pascal 语言( )
A 2020
B 2021
C 2022
D 2023
19 一家四口人,至少两个人生日属于同一月份的概率是( )(假定每个人生日属于每个月份的概率相同且不同人之间相互独立)
A 1/12
B 1/144
C 41/96
D 3/4
20 以下和计算机领域密切相关的奖项是( )
A 奥斯卡奖
B 图灵奖
C 诺贝尔奖
D 普利策奖
2 相关知识点
1) 栈
栈又名堆栈,是一种限定仅在表尾进行插入和删除操作的线性表,这一端称为栈顶,另一端称为栈底
栈中的数据元素遵守后进先出的原则
2) 归并排序
使用归并排序,
1 从中间把数列分成左右两部分
2 把分成的左右2部分中每部分再分成左右2部分
3 一直分下去,直到分拆成1个数
4 再按刚才拆的顺序合并
参考程序
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,a[N],tmp[N];
void merge(int L,int R,int mid){
int i=L,j=mid+1,k=L;
while(i<=mid && j<=R){
if(a[i]<a[j]){
tmp[k++]=a[i++];
}else{
tmp[k++]=a[j++];
}
}
while(i<=mid) tmp[k++]=a[i++];
while(j<=R) tmp[k++]=a[j++];
for(int i=L;i<=R;i++){
a[i]=tmp[i];
}
}
void mergeSort(int L,int R){
if(L>=R) return;
int mid=L+(R-L)/2;
mergeSort(L,mid);//左半部分排序
mergeSort(mid+1,R);//右半部分排序
merge(L,R,mid);//合并
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
mergeSort(0,n-1);
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
3) 乘法原理
做一件事,完成它需要分成n个步骤,做第一 步有m1种不同的方法,做第二步有m2种不同的方法,……,做第n步有mn种不同的方法。
那么完成这件事共有 N=m1 * m2 * m3 …* mn 种不同的方法
每个步骤没有完成一件事,只是完成了其中一个步骤
例如
马戏团的小丑有红、黄、蓝三顶帽子和黑、白两双鞋,他每次出场演出都要戴一顶帽子、穿一双鞋。问:小丑的帽子和鞋共有几种不同搭配?
分析
演出前着装需要2步
第1步 选1顶帽子 ,有3种选法
第2步 选1双鞋子 ,有2种选法
分2步适合乘法原理,总共搭配数 3 * 2 =6 种
4) 概率
概率是数学中的一个重要分支,它研究的是随机事件出现的可能性大小,在实际生活中我们经常需要用概率来做出决策或者预测未来的发展趋势。
古典概型
古典概型有2个特点
1 试验中所有可能出现的基本事件只有有限个(任何事件(除不可能事件)都可以表示成基本事件的和
2 每个基本事件出现的可能性相等
对于古典概型,如果随机事件A包含的基本事件的个数为m,基本事件的总数为n,则A事件的概率
计算古典概型事件概率分3步
1 计算事件A所包含的基本事件的个数m
2 计算基本事件总个数n
3 代入公式求概率P=m/n
例题1
计算抛骰子点数为1的概率是多少?
分析
点数有1,2,3,4,5,6
点数为1的概率基本事件A的个数m为1
基本事件总数n为6
因此概率为P=m/n=1/6
3 思路分析
16 对于入栈顺序为 a,b,c,d,e,f,g的序列,下列( C )不可能是合法的出栈序列
A a,b,c,d,e,f,g
B a,d,c,b,e,g,f
C a,d,b,c,g,f,e
D g,f,e,d,c,b,a
分析
A a进 a出 b进 b出 c进 c出 d进 d出 e进 e出 f进 f出 g进 g出 符合
B a进 a出 b进 c进 d进 d出 c出 b出 e进 e出 f进 g进 g出 f出 符合
C a进 a出 b进 c进 d进 d出 此时为c出,无法b出 所以不可能出现此种情况
D a进 b进 c进 d进 e进 f进 g进 g出 f出 e出 d出 c出 b出 a出 符合
17 设 A 和 B 是两个长为 n 的有序数组,现在需要将 A和 B合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做( D )次比较
A n^2
B n logn
C 2n
D 2n-1
根据归并排序过程
最坏的情况,就是每次都进行比较,交替从数组去取数据到临时数组
如果左边数据完全比右边数据小
例如: 1 2 3,4 5 6 ,这样就是1 2 3分别和4比较1次,后面数组就不需要比较了
最坏的情况示例
A = [1, 4, 7] 和 B = [2, 5, 8] 时
1 比较 A[0] (1) 和 B[0] (2),1 < 2,将 1 放入结果数组,移动到 A 的下一个元素
结果数组:[1]
2 比较 A[1] (4) 和 B[0] (2),4 > 2,将 2 放入结果数组,移动到 B 的下一个元素。
结果数组:[1, 2]
3 比较 A[1] (4) 和 B[1] (5),4 < 5,将 4 放入结果数组,移动到 A 的下一个元素。
结果数组:[1, 2, 4]
4 比较 A[2] (7) 和 B[1] (5),7 > 5,将 5 放入结果数组,移动到 B 的下一个元素。
结果数组:[1, 2, 4, 5]
5 A 数组只剩下一个元素 7,B 数组只剩下一个元素 8,比较1次大小,直接将它们依次放入结果数组。
结果数组:[1, 2, 4, 5, 7, 8]
从上面可知,每次都比较1次放入1个数,最后1次比较放入2个数,因此比较次数为n+n-1=2n-1
18 从( C )年开始,NOIP 竞赛将不再支持 Pascal 语言
A 2020
B 2021
C 2022
D 2023
19 一家四口人,至少两个人生日属于同一月份的概率是( )(假定每个人生日属于每个月份的概率相同且不同人之间相互独立)
A 1/12
B 1/144
C 41/96
D 3/4
分析
已知一家四口人,每个人的生日都有12个月份可以选择。
那么第一个人可以在任意一个月份生日,所以他有12种选择。
第二个人也有12种选择,第三个人和第四个人同样各有12种选择。
所以,根据乘法原理,四个人生日月份的总的可能性是 12*12*12*12
考虑至少有两个人生日月份相同的情况。
这种情况比较多,所以考虑反面情况:所有人生日月份都不同的情况
第1个人可以12个月任意1月,第2个人只能在11个月中选,第3个人剩余10月中选,第4人剩余9月中选
根据乘法原理,总的选择数为:12 * 11 * 10 * 9
所有人生日月份都不同的的概率 12 * 11 * 10 * 9/(12*12*12*12) = 55/96
它的反面至少两个人生日属于同一月份的概率 1-55/96=41/96
20 以下和计算机领域密切相关的奖项是( B )
A 奥斯卡奖
B 图灵奖
C 诺贝尔奖
D 普利策奖
A选项,奥斯卡奖是电影领域的最高奖项;
C选项,诺贝尔奖是包括物理学、化学、生理学或医学、文学、和平以及经济学六个领域的国际性奖项;
D选项,普利策奖也称为普利策新闻奖,是根据美国报业巨头约瑟夫·普利策的遗愿于1917年设立的奖项,后发展成为美国新闻界的最高荣誉奖。
因此,正确答案是 B 图灵奖