宁波市第24届中小学生计算机程序设计竞赛复赛试题(初中组) 第1页 共5页
宁波市第24届中小学生计算机程序设计竞赛
复赛试题(初中组)
比赛时间:2009年4月11日上午9:00—12:00
试题名称 输入文件名 输出文件名 内存限制 时限 冰壶比赛 Curling.in Curling.out 128 MB 1秒 分数统计 count.in count.out 128 MB 1秒 平方数 square.in square.out 128 MB 1秒 探险 explore.in explore.out 128 MB 1秒 关于竞赛中不同语言使用限制的说明
一.关于使用Pascal语言与编译结果的说明
1.对于Pascal语言的程序,当使用IDE和fpc编译结果不一致时,以fpc的编译结果为准。
2.允许使用数学库(uses math子句),以及ansistring。但不允许使用编译开关(最后测试时pascal的范围检查开关默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。
二.关于C++语言中模板使用的限制说明
1.允许使用的部分:
标准容器中的布尔集合,迭代器,串,流。
相关的头文件:
序列:vector,list,deque
序列适配器:stack, queue, priority_queue 关联容器:map, multimap, set, multiset 拟容器:valarray
散列容器:hash_map, hash_set, hash_multimap, hash_multiset 所有的标准库算法
相关头文件:
题1.冰壶比赛(Curling.pas/c/cpp)
【问题描述】
在3月29日举行的女子冰壶世锦赛决赛中,王冰玉、柳荫、岳清爽和周妍组成的中国女子冰壶队以8比6击败了冬奥会和世锦赛双冠王瑞典队,夺得了中国冰壶历史上第一枚世锦赛金牌,创造了历史。美丽、实力兼具的中国冰壶姑娘们也赢得了超高的赞誉。
在冰壶比赛中,给出一个目标点P,以及一个规定的正整数r。每一局由甲乙两队轮流投冰壶各8次后,该局比赛结束。此时,哪一方的冰壶最终离目标点P更近,该方得分,另一方不得分。得分方每颗离目标点P距离小于或等于r、位置较另一队所有冰壶都更接近目标点P的冰壶都可以得1分。
比赛最多进行10局。双方之间的某局比赛结束后,落后一方可以弃权。此时,比赛不再进行下去。 已知每一局结束时,双方的每个冰壶离目标点P的距离,以及正整数r,请你写一个程序判断两队之间每一局比赛的得分,以及总得分。
【输入】输入文件Curling.in的第一行只有一个正整数r。
以下有若干行(不超过20行),除了最后一行外,每一行有8个正整数(互相之间以一个空格分隔)。 第2行的第j个数表示第1局比赛结束时,甲方的第j个冰壶距离目标点P的距离;
? 宁波市计算机学会,2009
宁波市第24届中小学生计算机程序设计竞赛复赛试题(初中组) 第2页 共5页
第3行的第j个数表示第1局比赛结束时,乙方的第j个冰壶距离目标点P的距离; 第4行的第j个数表示第2局比赛结束时,甲方的第j个冰壶距离目标点P的距离; 第5行的第j个数表示第2局比赛结束时,乙方的第j个冰壶距离目标点P的距离; … …
第2k行的第j个数表示第k局比赛结束时,甲方的第j个冰壶距离目标点P的距离; 第2k+1行的第j个数表示第k局比赛结束时,乙方的第j个冰壶距离目标点P的距离; 如果有一方中途弃权,则最后一行(偶数行)只有一个整数-1,表示此时发生弃权情况。
【输出】输出文件Curling.out有若干行,每行有二个整数,中间以一个冒号分隔,表示每一局比赛甲乙双方的比分(甲得分在前)。
最后一行有二个整数,中间以一个冒号分隔,表示甲乙双方比赛的最终得分(甲得分在前)。 【样例输入1】 【样例输出1】 【样例输入2】 8 0:1 8 5 20 18 19 3 15 13 3 4:0 5 20 18 19 3 15 13 3 20 2 17 12 5 18 10 11 3:0 20 2 17 12 5 18 10 11 20 3 4 1 2 11 9 2 3:0 20 3 4 1 2 11 9 2 4 15 19 9 8 14 11 10 0:2 4 15 19 9 8 14 11 10 15 2 10 1 19 14 3 18 0:0 15 2 10 1 19 14 3 18 15 17 21 19 24 32 19 26 0:0 15 17 21 19 24 32 19 26 5 1 14 13 15 2 3 11 3:0 -1 14 7 5 19 10 12 6 9 2:0 【样例输出2】 3 14 9 8 4 8 3 10 0:0 0:1 14 6 9 4 8 2 1 5 15:3 4:0 3:0 7:1
9 8 1 2 8 8 7 18 16 8 20 19 3 1 10 5 2 13 19 2 18 9 18 3 6 5 5 20 6 17 2 18 17 3 20 6 9 3 17 17 20 10 8 12 19 19 18 20 15 18 4 18 17 14 5 16 6 14 8 14 19 7 13 7 15 9 2 8 20 3 10 14 8 6 3 2 4 11 4 10 【样例说明】
在样例1中和样例2中:
第1局比赛,甲方离目标点P的最近距离为3,乙方离目标点P的最近距离为2,乙方得分。乙比甲方的3更小的值只有1个(值为2壶),因此乙方得1分。
第3局比赛,甲方离目标点P的最近距离为1,乙方离目标点P的最近距离为15,甲方得分。甲比乙方的15小的值有5个(2、10、1、14、3),但小于等于r=8的值只有3个(2、1、3),因此甲得3分。 样例1进行完了所有10局比赛,总得分为15:3。样例2比赛进行了3局后,乙方弃权了,比赛到此结束,最终比分为已经进行过的前3局比分之和7:1。 【数据限制】70%的数据,双方均不弃权,比赛进行10局。
100%的数据,每只冰壶距离目标点P的距离不超过100。
? 宁波市计算机学会,2009
宁波市第24届中小学生计算机程序设计竞赛复赛试题(初中组) 第3页 共5页
题2.分数统计(count.pas/c/cpp)
【问题描述】
学校为了控制作业量,实施“轻负担,高质量”的有效教学,对所有在校学生的作业量情况进行了调查。每个学生对每门课的日均作业时间进行评价。最后统计出每门课的日均作业时间的平均值,作为学校评价习题教学效果的一个重要参考。
为了避免个别学生不客观评价的影响,学生的打分必须为1至100间的正整数,如果某个打分为不在此范围内的整数,则忽略。现在要求完成: (1)统计出每门课的日均作业时间的平均值;
(2)除去每门课中作业时间最多的和最少的10%的学生(四舍五入)后,统计平均值。 请你写个程序,完成以上任务。(提示:Pascal语言中, Round(x)为四舍五入函数,在C语言中可使用int(x+0.5)) 【输入】输入文件count.in 的第1行有2个正整数n,m(以一个空格分隔)。表示有n个人,m门课。
第2行至第n+1行,每行有m个正整数,表示学生对每门课日均作业时间的评价,每个整数之间以一个空格分隔。其中:第k+1行的第j个数表示第k个学生填写的第j门课的日均作业时间; 【输出】输出文件count.out有2行,每行有m个数(保留2位小数,每行的各个数之间以一个空格相互分隔),表示每门课日均作业时间的平均值。其中:
第1行的第j个数表示所有合法填写学生的第j门课的日均作业时间的平均值;
第2行的第j个数表示除去10%最多合法时间和10%最少合法时间的学生后,所有合法填写学生
第j门课的日均作业时间的平均值;【样例说明】 【样例输入】 【样例输出】 7 2 10 11 60 69 70 73 80 87 90 91 100 100 110 100
68.33 75.86 75.00 84.00 第1门课所有学生日均作业时间平均值为:(10+60+70+80+90+100)/6=68.33 第2门课所有学生日均作业时间平均值为:(11+69+73+87+91+100+100)/7=75.86 10%的学生数为:7*10%=0.7≈1(四舍五入至整数) 除最高和最低学生外,第1门课日均作业时间平均值为:(60+70+80+90)/4=75.00 除最高和最低学生外,第2门课日均作业时间平均值为:(69+73+87+91+100)/5=84.00 【数据限制】 70%的数据,5≤n≤1000; 100%的数据,5≤n≤50000, 1≤m≤6,学生填写的数据保证为整数,合法填写的学生总数保证大于10%的学生数(四舍五入至整数后)的2倍。 题3.平方数(square.pas/c/cpp)
【问题描述】
珍珍在学习乘法时,发现4=2*2,9=3*3,…, 而2不可能分解为二个整数的乘积,但可以分解为1*1+1*1。她想知道对任意的整数n,把它分解为几个整数与自身相乘之和,有多少种方案呢? 【输入】输入文件square.in只有一行,该行只有一个正整数n。
【输出】输出文件square.out只有一行,该行只有一个正整数,表示总方案数。 【样例输入1】 【样例输入2】 【样例说明】 4有2种分解方案,它们是:4=1*1+1*1+1*1+1*1=2*2 4 13 13有6种分解方案,它们是: 【样例输出1】 【样例输出2】 13=1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1 =1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+1*1+2*2 2 6 =1*1+1*1+1*1+1*1+1*1+2*2+2*2=1*1+1*1+1*1+1*1+3*3 =1*1+2*2+2*2+2*2=2*2+3*3 ? 宁波市计算机学会,2009
宁波市第24届中小学生计算机程序设计竞赛复赛试题(初中组) 第4页 共5页 【数据限制】
20%的数据,1≤n≤10; 50%的数据,1≤n≤300; 80%的数据,1≤n≤800; 100%的数据,1≤n≤2000。
题4.探险explore.pas/c/cpp
【问题描述】
有n个同学一起去探险,现在把n个同学分成k个小组,每个小组完成一项探险任务。分组时,如果第i人与第j人分在同一组(i 一个小组内所有人的体力和越小,途中可能越危险。为了确保每个同学的安全,要求分组时,使得所有小组中,体力和最小的那个小组的所有人的体力和尽量大。 依次告诉你每个人的体力,如何分组呢? 【输入】 输入文件explore.in的第1行有二个正整数n和k,互相之间以一个空格分隔。 第2行有n个正整数(互相以一个空格分隔),表示n个人的体力值。其中第j个整数表示第j个人的体力值。 【输出】 输出文件explore.out中只有1行,该行只有一个整数,表示最佳划分方案中,最弱的小组中,所有人的体力值之和。 【样例输入3】 【样例输入2】 【样例输入1】 5 4 5 3 5 2 5 2 1 6 9 5 2 1 6 9 5 2 1 6 9 【样例输出3】 【样例输出2】 【样例输出1】 3 7 9 【样例说明】 共有5个人,他们的体力值分别为:5、2、1、6、9。 (1)分成2个小组时,第1小组由前4个人组成,第2小组由第5个人单独组成,此时最弱小组的体力和为9(其它划分方案时最弱小组的体力和都小于9)。 (2)分成3个小组时,第1小组由前2个人组成,第2小组由第3、第4两人组成,第3小组由第5个人单独组成,此时最弱小组的体力和为7(其它划分方案时最弱小组的体力和都小于7)。 (3)分成4个小组时,第1小组由第1个人组成,第2小组由第2、3两人组成,第3小组由第4人组成,第4小组由第5人组成,此时最弱小组的的体力和为3(其它划分方案时最弱小组的体力和都小于3)。 【数据限制】 50%的数据,1≤k≤3; 80%的数据,1≤k≤100, 1≤n≤300; 100%的数据,1≤n≤30000,1≤k≤1000, k≤n,每个人的体力值不大于10000。 ? 宁波市计算机学会,2009 宁波市第24届中小学生计算机程序设计竞赛复赛试题(初中组) 第5页 共5页 ? 宁波市计算机学会,2009
2009年宁波市信息学竞赛复赛试题(初中组)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)