NOIP历年复赛提高组试题(2004-2013) 下载本文

2004~2013年NOIP复赛试题集(提高组)

4、等价表达式(equal.pas/c/cpp)

【问题描述】

明明进了中学之后,学到了代数表达式。有一天,他碰到一个很麻烦的选择题。这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数表达式是和题干中的表达式等价的。

这个题目手算很麻烦,因为明明对计算机编程很感兴趣,所以他想是不是可以用计算机来解决这个问题。假设你是明明,能完成这个任务吗?

这个选择题中的每个表达式都满足下面的性质: 1. 表达式只可能包含一个变量?a?。

2. 表达式中出现的数都是正整数,而且都小于10000。 3. 表达式中可以包括四种运算?+?(加),?-?(减),?*?(乘),?^?(乘幂),以及小括号?(?,?)?。小括号的优先级最高,其次是?^?,然后是?*?,最后是?+?和?-?。?+?和?-?的优先级是相同的。相同优先级的运算从左到右进行。(注意:运算符?+?,?-?,?*?,?^?以及小括号?(?,?)?都是英文字符)

4. 幂指数只可能是1到10之间的正整数(包括1和10)。 5. 表达式内部,头部或者尾部都可能有一些多余的空格。 下面是一些合理的表达式的例子:

((a^1) ^ 2)^3,a*a+a-a,((a+a)),9999+(a-a)*a,1 + (a -1)^3,1^10^9……

【输入文件】

输入文件equal.in的第一行给出的是题干中的表达式。第二行是一个整数n(2 <= n <= 26),表示选项的个数。后面n行,每行包括一个选项中的表达式。这n个选项的标号分别是A,B,C,D……

输入表达式的长度都不超过50个字符,且保证选项中总有表达式和题干中的表达式是等价的。

【输出文件】

输出文件equal.out包括一行,这一行包括一系列选项的标号,表示哪些选项是和题干中的表达式等价的。选项的标号按照字母顺序排列,而且之间没有空格。

【样例输入】

( a + 1) ^2 3

(a-1)^2+4*a a + 1+ a

a^2 + 2 * a * 1 + 1^2 + 10 -10 +a –a

【样例输出】

AC

【数据规模】

对于30%的数据,表达式中只可能出现两种运算符?+?和?-?;

对于其它的数据,四种运算符?+?,?-?,?*?,?^?在表达式中都可能出现。 对于全部的数据,表达式中都可能出现小括号?(?和?)?。

9

2004~2013年NOIP复赛试题集(提高组)

第十二届全国信息学奥林匹克分区联赛(NOIP2006)复赛试题

(提高组 竞赛用时:3小时)

关于竞赛中不同语言使用限制的说明

一.关于使用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 所有的标准库算法

10

2004~2013年NOIP复赛试题集(提高组)

相关头文件:

1.能量项链(energy.pas/c/cpp)

【问题描述】

在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为r,尾标记为n,则聚合后释放的能量为m*r*n(Mars单位),新产生的珠子的头标记为m,尾标记为n。

需要时,Mars人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。

例如:设N=4,4颗珠子的头标记与尾标记依次为(2,3) (3,5) (5,10) (10,2)。我们用记号⊕表示两颗珠子的聚合操作,(j⊕k)表示第j,k两颗珠子聚合后所释放的能量。则第4、1两颗珠子聚合后释放的能量为:

(4⊕1)=10*2*3=60。

这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 ((4⊕1)⊕2)⊕3)=10*2*3+10*3*5+10*5*10=710。

【输入文件】

输入文件energy.in的第一行是一个正整数N(4≤N≤100),表示项链上珠子的个数。第二行是N个用空格隔开的正整数,所有的数均不超过1000。第i个数为第i颗珠子的头标记(1≤i≤N),当i

至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。

【输出文件】

输出文件energy.out只有一行,是一个正整数E(E≤2.1*109),为一个最优聚合顺序所释放的总能量。

【输入样例】

4

2 3 5 10

【输出样例】

710

11

2004~2013年NOIP复赛试题集(提高组)

2.金明的预算方案(budget.pas/c/cpp) 【问题描述】

金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

如果要买归类为附件的物品,必须先买该附件所属的主 件 附 件 主件。每个主件可以有0个、1个或2个附件。附件不再有电脑 打印机,扫描仪 从属于自己的附件。金明想买的东西很多,肯定会超过妈书柜 图书 妈限定的N元。于是,他把每件物品规定了一个重要度,书桌 台灯,文具 分为5等:用整数1~5表示,第5等最重要。他还从因特工作椅 无 网上查到了每件物品的价格(都是10元的整数倍)。他希

望在不超过N元(可以等于N元)的前提下,使每件物品的价格与重要度的乘积的总和最大。

设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1,j2,??,jk,则所求的总和为:

v[j1]*w[j1]+v[j2]*w[j2]+ ?+v[jk]*w[jk]。(其中*为乘号) 请你帮助金明设计一个满足要求的购物单。

【输入文件】

输入文件budget.in 的第1行,为两个正整数,用一个空格隔开: n m

(其中N(<32000)表示总钱数,m(<60)为希望购买物品的个数。)

从第2行到第m+1行,第j行给出了编号为j-1的物品的基本数据,每行有3个非负整数 v p q

(其中v表示该物品的价格(v<10000),p表示该物品的重要度(1~5),q表示该物品是主件还是附件。如果q=0,表示该物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号)

【输出文件】

输出文件budget.out只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最大值(<200000)。

【输入样例】

1000 5 800 2 0 400 5 1 300 5 1 400 3 0 500 2 0

【输出样例】

2200

12