《2016年NOIP提高组初赛(C++).doc》由会员分享,可在线阅读,更多相关《2016年NOIP提高组初赛(C++).doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、/第二十二届全国青少年信息学奥林匹克联赛初赛提高组 C+语言试题(2小时)选手注意: 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分;每题有且仅有一个正确 选项)1.以下不是微软公司出品的软件是( )。. Powerpoint. Word . Excel. Acrobat Reader2.如果开始时计算机处于小写输入状态,现在有一只小老鼠反复按照 CapsLock、字母键 A、字母键 S 和字母键 D 的顺序来回按键,即 CapsLock、A、S、D、S、A、CapsLock、A、S、D、S、A、Caps
2、Lock、A、S、D、S、A、,屏幕上输出的第 81 个字符是字母( )。. A . S . D . A3.二进制数 00101100 和 01010101 异或的结果是( )。. 00101000 . 01111001 . 01000100 . 001110004. 与二进制小数 0.1 相等的八进进制数是( )。. 0.8 . 0.4 . 0.2 . 0.15. 以比较作为基本运算,在 N 个数中找最小数的最少运算次数为( )。. N . N-1 . N2 . log N6. 表达式 a*(b+c)-d 的后缀表达形式为( )。. abcd*+- . abc+*d- . abc*+d- .
3、 -+*abcd7. 一棵二叉树如右图所示,若采用二叉树链表存储该二叉 树(各个结点包括结点的数据、左孩子指针、右孩子指针)。如果没有左孩子或者右孩子,则对应的为空指针。那么该链表中空指针的数目为( )。A. 6 B. 7 C. 12 . 148.G 是一个非连通简单无向图,共有 28 条边,则该图至少有( )个顶点。. 10 . 9 .8 .7 9.某计算机的 CPU 和内存之间的地址总线宽度是 32 位(bit),这台计算机最多可以使用( )的内存。A.2GBB.4GBC.8GBD.16GB10.有以下程序:#include using namespace std;int main() i
4、nt k = 4, n = 0; while (n k) n+;if (n % 3 != 0) continue;k-;cout k , n endl; return 0;程序运行后的输出结果是( )。. 2,2 . 2,3 . 3,2 . 3,311. 有 7 个一模一样的苹果,放到 3 个一样的盘子中,一共有( )种放法。. 7 . 8 . 21 . 3712.Lucia 和她的朋友以及朋友的朋友都在某社交网站上注册了账号。下图是他们 之间的关系图,两个人之间有边相连代表这两个人是朋友,没有边相连代表不是朋友。这个社交网站的规则是:如果某人 A 向他(她)的朋友 B 分享了 某张照片,那么
5、 B 就可以对该照片进行评论;如果 B 评论了该照片,那么他 (她)的所有朋友都可以看见这个评论以及被评论的照片,但是不能对该照片进行评论(除非 A 也向他(她)分享了该照片)。现在 Lucia 已经上传了一张照片,但是她不想让 Jacob 看见这张照片,那么她可以向以下朋友( )分享该照片。. Dana, Michael, Eve . Dana, Eve, Monica. Michael, Eve, Jacob . Micheal, Peter, Monica13.周末小明和爸爸妈妈三个人一起想动手做三道菜。小明负责洗菜、爸爸负责 切菜、妈妈负责炒菜。假设做每道菜的顺序都是:先洗菜 10 分
6、钟,然后切 菜 10 分钟,最后炒菜 10 分钟。那么做一道菜需要 30 分钟。注意:两道不 同的菜的相同步骤不可以同时进行。例如第一道菜和第二道的菜不能同时洗,也不能同时切。那么做完三道菜的最短时间需要()分钟。A.90B.60C.50D.4014. 假设某算法的计算时间表示为递推关系式T(n) = 2T()+T(1) = 1则算法的时间复杂度为( )。A.O(n)B. O()C. O( logn)D.O(n2)1.给定含有 n 个不同的数的数组 L=。如果 L 中存在 Xi(1 i n) 使得 X1 X2 . Xi-1 xi+1 . Xn, 则称 L 是单峰的,并称 xi 是 L 的“峰顶
7、”。现在已知 L 是单峰的,请把 a-c 三行代码补全到算法中使得算法 正确找到 L 的峰顶。a.Search(k+1, n)b.Search(1, k-1)c.return LkSearch(1, n)1.k n/22.if Lk Lk-1 and Lk Lk+13.then _4.else if Lk Lk-1 and Lk Lk+15.then _6.else _正确的填空顺序是()。A.c, a, bB.c, b, aC.a, b, cD.b, a, c二、不定项选择题(共 5 题,每题 1.5 分,共计 7.5 分;每题有一个或多个正确 选项,多选或少选均不得分)1.以下属于无线通信
8、技术的有( )。A.蓝牙B.WiFiC.GPRSD.以太网2.可以将单个计算机接入到计算机网络中的网络接入通讯设备有( )。A.网卡B.光驱C.鼠标D.显卡3.下列算法中运用分治思想的有( )。A.快速排序B.归并排序C.冒泡排序D.计数排序4.下图表示一个果园灌溉系统,有 A、B、C、D 四个阀门,每个阀门可以打开 或关上,所有管道粗细相同,以下设置阀门的方法中,可以让果树浇上水的有( )。 有水 有水果树A.B 打开,其他都关上 B.AB 都打开,CD 都关上C.A 打开,其他都关上 D.D 打开,其他都关上5. 参加 NOI 比赛,以下能带入考场的有( )。A.钢笔 B.适量的衣服C.U
9、 盘 D.铅笔三、问题求解(共 2 题,每题 5 分,共计 10 分;每题全部答对得 5 分,没有部分分)1.一个 18 的方格图形(不可旋转)用黑、白两种颜色填涂每个方格。如果 每个方格只能填涂一种颜色,且不允许两个黑格相邻,共有_种填 涂方案。2.某中学在安排期末考试时发现,有 7 个学生要参加 7 门课程的考试,下表列 出了哪些学生参加哪些考试(用表示要参加相应的考试)。 最少要安排_个不同的考试时间段才能避免冲突?考试学生 1学生 2学生 3学生 4学生 5学生 6学生 7通用技术物理化学生物历史地理政治四、阅读程序写结果(共 4 题,每题 8 分,共计 32 分)1.#include
10、 using namespace std;int main() int a6 = 1, 2, 3, 4, 5, 6; int pi = 0; int pj = 5; int t , i;while (pi pj) t = api; api = apj; apj = t; pi+; pj-;for (i = 0; i 6; i+) cout ai ,;cout endl; return 0;输出:_2.#include using namespace std;int main() char a100100, b100100; string c100; string tmp;int n, i =
11、0, j = 0, k = 0, total_len100, length1003;cin n;getline(cin, tmp);for (i = 0; i n; i+) getline(cin, ci);total_leni = ci.size();for (i = 0; i n; i+) j = 0;while (cij != :) aik = cij;k = k + 1; j+;lengthi1 = k - 1; aik = 0;k = 0;for (j = j + 1; j total_leni; j+) bik = cij;k = k + 1;lengthi2 = k - 1; b
12、ik = 0;k = 0;for (i = 0; i = lengthi2) cout NO,;else k = 0;for (j = 0; j lengthi1) break;if (j = lengthi2) cout NO,;else cout YES,;cout endl;return 0;输入:3 AB:ACDEbFBkBD AR:ACDBrTSARS:Severe Atypical Respiratory Syndrome 输出:_(注:输入各行前后均无空格)3.#include using namespace std;int lps(string seq, int i, int
13、j) int len1, len2;if (i = j) return 1;if (i j) return 0;if (seqi = seqj)return lps(seq, i + 1, j - 1) + 2; len1 = lps(seq, i, j - 1);len2 = lps(seq, i + 1, j); if (len1 len2) return len1; return len2;int main() string seq = acmerandacm; int n = seq.size();cout lps(seq, 0, n - 1) endl; return 0;输出:_4
14、.#include #include using namespace std;int map100100;int sum100, weight100; int visit100;int n;void dfs(int node) visitnode = 1; sumnode = 1; int v, maxw = 0;for (v = 1; v maxw) maxw = sumv;if (n - sumnode maxw) maxw = n - sumnode;weightnode = maxw;int main() memset(map, 0, sizeof(map); memset(sum,
15、0, sizeof(sum); memset(weight, 0, sizeof(weight); memset(visit, 0, sizeof(visit); cin n;int i, x, y;for (i = 1; i x y; mapxy = 1; mapyx = 1;dfs(1);int ans = n, ansN = 0; for (i = 1; i = n; i+)if (weighti ans) ans = weighti; ansN = i;cout ansN ans endl; return 0;输入:111 21 32 42 52 63 77 87 116 99 10输
16、出:_五、完善程序(共 2 题,每题 14 分,共计 28 分)1.(交朋友)根据社会学研究表明,人们都喜欢找和自己身高相近的人做朋友。现在有 n 名身高两两不相同的同学依次走入教室,调查人员想预测每个人在走入教室的瞬间最想和已经进入教室的哪个人做朋友。当有两名同学和这名 同学的身高差一样时,这名同学会更想和高的那个人做朋友。比如一名身高为1.80 米的同学进入教室时,有一名身高为 1.79 米的同学和一名身高为1.81米的同学在教室里,那么这名身高为 1.80 米的同学会更想和身高为 1.81 米的同学做朋友。对于第一个走入教室的同学我们不做预测。由于我们知道所有人的身高和走进教室的次序,所
17、以我们可以采用离线的做法来解决这样的问题,我们用排序加链表的方式帮助每一个人找到在他 之前进入教室的并且和他身高最相近的人。(第一空 2 分,其余 3 分)#include using namespace std; #define MAXN 200000#define infinity 2147483647int answerMAXN, heightMAXN, previousMAXN, nextMAXN; int rankMAXN;int n;void sort(int l, int r) int x = heightrank(l + r) / 2, i = l, j = r, temp;
18、while (i = j)while (heightranki x) j-;if ( (1) ) temp = ranki; ranki = rankj;rankj = temp;i+; j-; if (i r) sort(i, r); if (l n;int i, higher, shorter; for (i = 1; i heighti; ranki = i;sort(1, n);for (i = 1; i = 2; i-) higher = shorter = infinity; if (previousi !=0)shorter = heighti - heightpreviousi
19、;if (nexti != 0) (3) ;if ( (4) )answeri = previousi;elseansweri = nexti;nextpreviousi = nexti; (5) ;for (i = 2; i = n; i+)cout i : 1)个城市因地震而导致交通中断时,首都到多少个城市的最短路径长度会发生改变。如果因为无法通过第 i 个城市而导致从首都出发无法到达某个城市,也认为到达该城市的最短路径长度改变。对于每一个城市 i,假定只有第 i 个城市与外界交通中断,输出有多少个城市会因此导致到首都的最短路径长度改变。我们采用邻接表的方式存储图的信息,其中 headx表
20、示顶点 x 的第一条 边的编号,nexti表示第 i 条边的下一条边的编号,pointi表示第 i 条边的终点,weighti表示第 i 条边的长度。(第一空 2 分,其余 3 分)#include #include using namespace std; #define MAXN 6000 #define MAXM 100000#define infinity 2147483647int headMAXN, nextMAXM, pointMAXM, weightMAXM;int queueMAXN, distMAXN, visitMAXN;int n, m, x, y, z, total
21、= 0, answer;void link(int x,int y,int z) total+;nexttotal = headx; headx = total; pointtotal = y; weighttotal = z; total+;nexttotal = heady; heady = total; pointtotal = x; weighttotal = z;int main() int i, j, s, t; cin n m;for (i = 1; i x y z; link(x, y, z);for (i = 1; i = n; i+) disti = infinity; (
22、1) ;queue1 = 1; visit1 = 1; s = 1;t = 1;/ 使用 SPFA 求出第一个点到其余各点的最短路长度while (s = t) x = queues % MAXN;j = headx;while (j != 0) if ( (2) ) distpointj = distx + weightj;if (visitpointj = 0) t+;queuet % MAXN = pointj;visitpointj = 1; j = nextj; (3) ;s+; for (i = 2; i = n; i+) queue1 = 1;memset(visit, 0, s
23、izeof(visit);visit1 = 1;s = 1;t = 1;while (s = t) / 判断最短路长度是否不变x = queues;j = headx;while (j != 0) if (pointj != i & (4) &visitpointj = 0) (5) ;t+;queuet = pointj;j = nextj;s+;answer = 0;for (j = 1; j = n; j+) answer += 1 - visitj;cout i : answer - 1 endl;return 0;答案:一、 DABBB BBBBD BACCA二、 ABC A AB A ABD三、 55 3四、 1. 6,5,4,3,2,12. YES,NO,YES,3. 54. 2 5五、1.(1) i=j (2) nextranki=ranki+1 (3)higher=heightnexti-heighti (4)shorterhigher (5)previousnexti=previousi2.(1)dist1=0 (2)distx+weightjdistpointj (3)visitx=0 (4)distx+weightj=distpointj (5)visitpointj=1