全国青少年信息学(计算机)奥林匹克竞赛初中组复赛试题06
第十二届全国青少年信息学奥林匹克联赛复赛试题(NOIP2006 普及组)竞赛时间:2006 年 11 月 18 日 下午 1:30-4:30试题名称 random Happy count sequence目录 random Happy count sequence输入文件名 random.in happy.in count.in sequence.in输出文件名 random.out happy.out count.out sequence.out试题类型 非交互式程序题非交互式程序题 非交互式程序题非交互式程序题附加文件 无 无 无 无时限 1 秒 1 秒 1 秒 1 秒关于竞赛中不同语言使用限制的说明一.关于使用 Pascal 语言与编译结果的说明1.对于 Pascal 语言的程序,当使用 IDE 和 fpc 编译结果不一致时,以 fpc 的编译结果为准。2.允许使用数学库(uses math 子句),以及 ansistring。但不允许使用编译开关(最后测试时 pascal 的范围检查开关默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。二.关于 C++语言中模板使用的限制说明1.允许使用的部分:标准容器中的布尔集合,迭代器,串,流。相关的头文件: 2.禁止使用的部分:序列:vector,list,deque序列适配器:stack, queue, priority_queue关联容器:map, multimap, set, multiset拟容器:valarray 散列容器:hash_map, hash_set, hash_multimap, hash_multiset所有的标准库算法相关头文件: 1.明明的随机数(random.pas/c/cpp)【问题描述】明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。【输入文件】输入文件 random.in 有 2 行,第 1 行为 1 个正整数,表示所生成的随机数的个数:N第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。【输出文件】输出文件 random.out 也是 2 行,第 1 行为 1 个正整数 M,表示不相同的随机数的个数。第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。【输入样例】1020 40 32 67 40 20 89 300 400 15【输出样例】815 20 32 40 67 89 300 4002.开心的金明(happy.pas/c/cpp)【问题描述】金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 N 元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的 N 元。于是,他把每件物品规定了一个重要度,分为 5 等:用整数 1~5 表示,第 5 等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过 N元(可以等于 N 元)的前提下,使每件物品的价格与重要度的乘积的总和最大。设第 j 件物品的价格为 v[j],重要度为 w[j],共选中了 k 件物品,编号依次为 j1,j 2,……,j k,则所求的总和为:v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中*为乘号)请你帮助金明设计一个满足要求的购物单。【输入文件】输入文件 happy.in 的第 1 行,为两个正整数,用一个空格隔开:N m(其中 N(,且不存在 Jam 数字 P,使 U)。你的任务是:对于从文件读入的一个 Jam 数字,按顺序输出紧接在后面的 5 个 Jam 数字,如果后面没有那么多 Jam 数字,那么有几个就输出几个。【输入文件】输入文件 counting.in 有 2 行,第 1 行为 3 个正整数,用一个空格隔开:s t w(其中 s 为所使用的最小的字母的序号,t 为所使用的最大的字母的序号。w 为数字的位数,这 3 个数满足: 1≤s≤26, 2≤w ≤t-s ) 第 2 行为具有 w 个小写字母的字符串,为一个符合要求的 Jam 数字。所给的数据都是正确的,不必验证。【输出文件】输出文件 counting.out 最多为 5 行,为紧接在输入的 Jam 数字后面的5 个 Jam 数字,如果后面没有那么多 Jam 数字,那么有几个就输出几个。每行只输出一个 Jam 数字,是由 w 个小写字母组成的字符串,不要有多余的空格。【输入样例】2 10 5bdfij【输出样例】bdghibdghjbdgijbdhijbefgh4.数列(sequence.pas/c/cpp)【问题描述】给定一个正整数 k(3≤k ≤15), 把所有 k 的方幂及所有有限个互不相等的k 的方幂之和构成一个递增的序列,例如,当 k=3 时,这个序列是:1,3,4,9,10,12,13 ,…(该序列实际上就是:3 0,3 1,3 0+31,3 2,3 0+32,3 1+32,3 0+31+32,…)请你求出这个序列的第 N 项的值(用 10 进制数表示)。例如,对于 k=3,N=100,正确答案应该是 981。【输入文件】输入文件 sequence.in 只有 1 行,为 2 个正整数,用一个空格隔开:k N(k、N 的含义与上述的问题描述一致,且 3≤k≤ 15,10≤N≤1000 )。【输出文件】输出文件 sequence.out 为计算结果,是一个正整数(在所有的测试数据中,结果均不超过 2.1*109)。(整数前不要有空格和其他符号)。【输入样例】3 100【输出样例】981