NOIP2008提高小组复试试题?

全国信息学奥林匹克联赛(NOIP2008)复赛

改进小组

一.专题概述

哑猴火柴棍等转印纸双叠分拣

英文标题词匹配信息二栈

可执行文件名称字匹配消息二堆栈

输入文件名单词,inmatches。消息中。成双入对。

输出文件名word . out matches . out message . outtwo stack . out。

每个考点的时间限制是1秒1秒1秒1秒。

测试点数10 10 10 10

每个考点的分数是10 10 10 10。

比较方法全文比较全文比较全文比较全文比较全文比较全文比较全文比较

话题类型传统传统传统传统

第二,提交源文件名

对于Pascal语言的单词。pas matches . pas message . pastwostack . pas

对于C语言的单词。c匹配。c消息。cTWOStack.c。

对于C++语言的word。CPP匹配。CPP消息。CPP二叠。CPP。

三。编译命令(不包括任何优化开关)

对于Pascal语言fpcword。pasfpcmatches。pasfpcmessage。pasfptwostack。帕斯。

对于c语言gcc–o word word . cgcc–o matches matches . cgcc–o message message . cgcc–o two stack two stack . c

对于C++语言G++-o word word。CPPG ++ o匹配。CPPG ++ o消息。CPPG ++ o两栈两栈。CPP。

第四,运行内存限制

最大运行内存为50m 50m 50m 50m。

注意事项:

1.文件名(程序名和输入/输出文件名)必须大写。

2.C/c++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。

3.全国统一评测使用的机器配置为:CPU 1.9GHz,内存512M,以上时限以此配置为准。各省可在自测时根据具体配置调整时限。

1.愚蠢的猴子

(wird.pas/c/cpp)

问题描述

笨猴子词汇量小,每次做英语选择题都很头疼。但是他找到了一个方法,而且已经被实验证明,这个方法选择正确选项的概率是非常高的!

这个方法的具体描述如下:假设maxn是一个单词中出现频率最高的字母的次数,minn是一个单词中出现频率最低的字母的次数。如果maxn-minn是一个质数,那么笨猴子认为这是一个吉祥字,这样的字很可能就是正确答案。

投入

输入文件word.in只有一行,是一个单词,其中可能只出现小写字母,长度小于100。

输出

输出文件word.out***两行,第一行是字符串,假设输入的字是幸运字,则输出“幸运字”,否则输出“无答案”;

第二行是一个整数。如果输入字是幸运字,输出maxn-minn的值,否则输出0。

输入和输出样本1

word . in word . out

错误幸运词

2

I/O示例1解释

在单词error中,出现频率最高的字母r出现三次,出现频率最低的字母1次,3-1=2,2是一个素数。

输入和输出样本2

word . in word . out

奥林匹克不回答

输入和输出样本2解释

在奥林匹克这个词中,出现频率最高的字母I出现了两次,出现频率最低的字母是1次,2-1=1,1不是质数。

2.火柴杆方程

(matches.pas/c/cpp)

问题描述

给你n根火柴棍,你能拼出多少个类似“A+B=C”的方程?等式中,a、b、c是用火柴棍拼出来的整数(如果数字不为零,最高位不能是0)。用火柴棒拼出数字0-9,如图所示:

注意:

1.加号和等号各需要两根火柴杆。

2.若A≠B,则A+B=C和B+A=C视为不同的方程(A,B,C >;=0)

3.必须使用所有N根火柴杆。

投入

在文件matches.in中输入一行*** *,和另一个整数n (n

输出

输出文件matches.out***一行,表示可以拼写的不同方程的数量。

输入和输出样本1

matches . in matches . out

14 2

I/O示例1解释

这两个方程是0+1=1和1+0=1。

输入和输出样本2

matches . in matches . out

18 9

输入和输出样本2解释

这九个等式是:

0+4=4

0+11=11

1+10=11

2+2=4

2+7=9

4+0=4

7+2=9

10+1=11

11+0=11

传递纸条

(wassage.pas/c/cpp)

问题描述

小渊和小轩是好朋友和同学。他们在一起总是有说不完的话题。在一次素质拓展活动中,班上同学安排做一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,不能直接对话。幸运的是,他们可以通过传纸条来交流。纸条会通过很多同学发给对方。小渊坐在矩阵的左上角,坐标为(1,1),小轩坐在矩阵的右下角,坐标为(m,n)。从小源到小轩的音符只能向下或向右传递,从小轩到小源的音符只能向上或向左传递。

在活动中,小渊希望给小轩发一张便条,并希望小轩给他一个答复。班上每个人都可以帮他们传,但只能传一次。也就是说,如果这个人在小渊递给小轩一张纸条的时候帮忙,他在小轩递给小渊的时候就不会帮忙了。反之亦然。

还有一点需要注意的是,班里每个学生的好感度有高有低(注:小渊和小轩对好感度没有定义,用0输入),可以用0-100的自然数来表示,数字越大越好。小渊和小轩希望尽可能找到善良度高的同学帮忙传纸条,也就是来回找两条传递路径,让这两条路径上的同学的善良度只有最大。现在,请帮助小渊和小轩找到这样两条路。

投入

输入文件message.in的第一行有两个由空格分隔的整数m和n,表示类中有m行和n列(1

接下来的m行是一个m*n的矩阵,矩阵中I行J列的整数表示坐在I行J列的同学的善意。每行中的n个整数由空格分隔。

输出

输出文件message.out***包含一个整数,代表两路参与送纸条的同学的善心的最大和。

投入产出样本

message . in message . out

3 3

0 3 9

2 8 5

5 7 0 34

限制

30%的数据符合:1

100%的数据满足:1

4.双栈排序

(twostack.pas/c/cpp)

问题描述

汤姆最近在研究一个有趣的排序问题。如图所示,通过两个栈S1和S2,Tom希望通过以下四种运算对输入序列进行升序排序。

操作a

如果输入序列不为空,则将第一个元素推入堆栈S1。

操作b

如果堆栈S1不为空,堆栈S1的顶部元素被弹出到输出序列。

操作c

如果输入序列不为空,则将第一个元素推送到堆栈S2上。

操作d

如果堆栈S2不为空,堆栈S2的顶部元素将被弹出到输出序列。

如果一个1~n的置换P可以使输出序列1,2,...(n-1),N,Tom称为“双栈可排序排列”。例如,(1,3,2,4)是“双栈可排序序列”,而(2,3,4,1)不是。下图描述了一个排序(1,3,2,4): < a,c,c,b,a,d,d,b & gt

当然,可能有几个这样的操作顺序。对于上面的例子(1,3,2,4),< a,c,c,b,a,d,d,b & gt是另一种可行的操作顺序。汤姆想知道字典顺序最小的运算序列是什么。

投入

输入文件twostack.in的第一行是整数n。

第二行有n个正整数,用空格隔开,形成1 ~ n的排列。

输出

输出一行文件twostack.out***,如果输入排列不是“双栈可排序排列”,输出数字0;否则输出字典顺序最小的操作序列,每两个操作之间用空格隔开,行尾没有空格。

输入和输出样本1

two stack . intwostack . out

1 3 2 4a b a a b a b a b

输入和输出样本2

two stack . intwostack . out

2 3 4 1 0

输入和输出样本3

two stack . intwostack . out

2 3 1a c a b b d

限制

30%的数据符合:n

50%的数据符合:n

100%数据符合:n