求第十二届全国青奥信息学联赛复赛试题(普及组PASCAL语言)。

第12届全国青少年信息学奥林匹克

联赛半决赛试题

(NOIP2006普及组)

比赛时间:6月165438+10月65438+8月65438+下午0:30-4:30。

测试标题

随意

幸福的

数数

顺序

目录

随意

幸福的

数数

顺序

输入文件名

随机输入

快乐. in

算进去

序列输入

导出文件名

随机输出

开心,出去

清点完毕

序列输出

测试问题类型

非交互式程序问题

非交互式程序问题

非交互式程序问题

非交互式程序问题

所附文件

没有

没有

没有

没有

限期

1秒

1秒

1秒

1秒

对比赛中使用不同语言的限制的解释

一、Pascal语言使用说明及编译结果

1.对于Pascal语言程序,当IDE和fpc的编译结果不一致时,以fpc的编译结果为准。

2.允许使用数学库(使用math子句)和ansistring。但是不允许使用编译开关(pascal的范围检查开关在最终测试时默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。

二。C++语言中模板使用限制的说明

1.允许的零件:

标准容器中的布尔集合、迭代器、字符串、流。

相关头文件:

2.禁止零件:

序列:向量,列表,队列

串行适配器:堆栈,队列,优先级队列。

关联容器:映射、多重映射、集合、多重集合。

准容器:valarray

哈希容器:hash _ map、hash _ set、hash _ multimap、hash _ multiset。

所有标准库算法

相关头文件:

1.明明随机数

(random.pas/c/cpp)

问题描述

很显然,我想邀请一些学生在学校做一个问卷调查。为了实验的客观性,他首先用计算机生成了1到1000之间的n个随机整数(n ≤ 1000)。对于重复的号码,只保留一个,其他相同的号码都去掉。不同的数字对应不同学生的学号。然后把这些数字从小到大排序,按照排序的顺序去找你的同学调查。请帮助明明完成“去重”和“整理”的工作。

输入文件

输入文件random.in有2行,1行包含1个正整数,表示生成随机数的个数:

普通

第二行有n个正整数,用空格隔开,是生成的随机数。

输出文件

输出文件random.out也是2行,1行是1正整数m,表示不同随机数的个数。第二行是m个正整数,用空格隔开,是从小到大排列的不同随机数。

输入样本

10

20 40 32 67 40 20 89 300 400 15

输出样本

15 20 32 40 67 89 300 400

2.快乐的金明

(happy.pas/c/cpp)

问题描述

金明今天很高兴。他家里买的新房即将拿到钥匙。新房子里有他自己的一个宽敞的房间。让他高兴的是,他妈妈昨天对他说:“你需要买什么物品,怎么装修房间都可以,只要不超过N元就行。”金明今天早上开始做预算,但是想买的东西太多了,肯定会超过妈妈定的N元。于是,他指定了每一项的一个重要性,分为五个等级:用整数1~5表示,第五级最重要。他还从网上查了每样东西的价格(都是整元的)。他希望在不超过N元(可以等于N元)的前提下,最大化价格和每一项的重要性的乘积之和。

设第j项的价格为v[j],重要性为w[j],* *选定k项,序号为j1,j2,...反过来,jk则要求的总和是:

v[j 1]* w[j 1]+v[J2]* w[J2]+…+v[JK]* w[JK].(其中*是乘法符号)

请帮助金明设计一份符合要求的购物清单。

输入文件

输入文件happy.in的第1行是由空格分隔的两个正整数:

n·m

(其中n(

从第2行到第m+1行,J行给出了编号为j-1的文章的基本数据,每行有2个非负整数。

副总裁

(其中v代表物品的价格(v

输出文件

输出文件happy.out只有一个正整数,是价格和商品重要性的乘积之和不超过货币总额的最大值(

输入样本

1000 5

800 2

400 5

300 5

400 3

200 2

输出样本

3900

3.3的计数方法。困境

(count.pas/c/cpp)

问题描述

Jam是个喜欢标新立异的科学怪人。他不用阿拉伯数字来计数,而是用小写英文字母来计数,他认为这样会让世界更加丰富多彩。在他的计数方法中,每个数字的位数都是相同的(使用相同数量的字母),英文字母按原顺序排列,前面的字母比后面的字母小。我们称这样的“数字”为果酱数字。在Jam数字中,每个字母互不相同,并且从左到右严格递增。每次Jam还会指定字母的范围,例如从2到10,也就是说只能使用字母{b,c,d,e,f,g,h,I,j}。如果位数被指定为5,则紧接在卡纸编号“bdfij”之后的数字应该是“bdghi”。(如果我们用U和V依次表示堵塞号“bdfij”和“bdghi”,那么U,就没有堵塞号P,所以U)。你的任务是:对于从文件中读取的一个Jam编号,依次输出接下来的五个Jam编号。如果没有那么多果酱号,那就输出几个。

输入文件

输入文件counting.in有2行,1行包含3个由空格分隔的正整数:

s t w

(其中s是所用最小字母的序列号,t是所用最大字母的序列号。w是位数,这三个数满足:1≤s≤26,2≤w≤t-s)

第二行是w小写字母的字符串,是符合要求的Jam数。

所有给出的数据都是正确的,不需要验证。

输出文件

输出文件counting.out最多有5行,是紧接在输入堵塞号之后的5个堵塞号。如果没有那么多卡纸号,那就输出几个。每行只输出一个Jam数,是由w个小写字母组成的字符串,没有多余的空格。

输入样本

2 10 5

bdfij

输出样本

bdghi

bdghj

bdgij

bdhij

befgh

4.顺序

(sequence.pas/c/cpp)

问题描述

给定一个正整数k(3≤k≤15),k的所有次幂和k的所有有限次幂互不相等的和构成一个递增序列。例如,当k=3时,该序列为:

1,3,4,9,10,12,13,…

(顺序其实是:30,365,438+0,30+365,438+0,32,30+32,365,438+0+32,30+365,438+0+32,...)

请求这个数列第n项的值(用10十进制数表示)。

比如对于k=3,N=100,正确答案应该是981。

输入文件

输入文件sequence.in只有1行,是由空格分隔的两个正整数:

k N

(k和N的含义与上述问题描述一致,3≤k≤15,10≤N≤1000)。

输出文件

输出文件sequence.out为计算结果,为正整数(在所有测试数据中,结果不超过2.1*109)。整数前不要有空格和其他符号。

输入样本

3 100

输出样本

981