当前位置:文档之家› 普及组复赛模拟题

普及组复赛模拟题

Noip2009模拟题
命题人:华南师范大学附属中学罗穗骞
时间:2009年7月17日
题目一览
开灯(light.pas/c/cpp)
【题目描述】
在一条无限长的路上,有一排无限长的路灯,编号为1,2,3,4,……。

每一盏灯只有两种可能的状态,开或者关。

如果按一下某一盏灯的开关,那么这盏灯的状态将发生改变。

如果原来是开,将变成关。

如果原来是关,将变成开。

在刚开始的时候,所有的灯都是关的。

小明每次可以进行如下的操作:
指定两个数,a,t(a为实数,t为正整数)。

将编号为[a],[2*a],
[3*a],……,[t*a]的灯的开关各按一次。

其中[k]表示实数k的整数部分。

在小明进行了n次操作后,小明突然发现,这个时候只有一盏灯是开的,小明很想知道这盏灯的编号,可是这盏灯离小明太远了,小明看不清编号是多少。

幸好,小明还记得之前的n次操作。

于是小明找到了你,你能帮他计算出这盏开着的灯的编号吗?
【输入格式】
第一行一个正整数n,表示n次操作。

接下来有n行,每行两个数,ai,ti。

其中ai是实数,小数点后一定有6位,ti是正整数。

【输出格式】
仅一个正整数,那盏开着的灯的编号。

【输入样例】
3
1.618034 13
2.618034 7
1.000000 21
【输出样例】
20
【数据规模】
记T=t1+t2+t3+……+tn。

对于30%的数据,满足T<=1000
对于80%的数据,满足T<=200000
对于100%的数据,满足T<=2000000
对于100%的数据,满足n<=5000,1<=ai<1000,1<=ti<=T
数据保证,在经过n次操作后,有且只有一盏灯是开的,不必判错。

打砖块(game.pas/c/cpp)
【题目描述】
小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下:
在刚开始的时候,有n行*m列的砖块,小红有k发子弹。

小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分。

如图所示:
某些砖块在打碎以后,还可能将得到一发子弹的奖励。

最后当所有的砖块都打碎了,或者小红没有子弹了,游戏结束。

小红在游戏开始之前,就已经知道每一块砖在打碎以后的得分,并且知道能不能得到一发奖励的子弹。

小红想知道在这次游戏中她可能的最大得分,可是这个问题对于她来说太难了,你能帮帮她吗?
【输入格式】
第一行有3个正整数,n,m,k。

表示开始的时候,有n行*m列的砖块,小红有k发子弹。

接下来有n行,每行的格式如下:
f1 c1 f2 c2 f3 c3 …… fm cm
其中fi为正整数,表示这一行的第i列的砖,在打碎以后的得分。

ci为一个字符,只有两种可能,Y或者N。

Y表示有一发奖励的子弹,N表示没有。

所有的数与字符之间用一个空格隔开,行末没有多余的空格。

【输出格式】
仅一个正整数,表示最大的得分。

【输入样例】
3 4 2
9 N 5 N 1 N 8 N
5 N 5 Y 5 N 5 N
6 N 2 N 4 N 3 N
【输出样例】
13
【数据规模】
对于20%的数据,满足1<=n,m<=5,1<=k<=10,所有的字符c都为N
对于50%的数据,满足1<=n,m<=200,1<=k<=200,所有的字符c都为N 对于100%的数据,满足1<=n,m<=200,1<=k<=200,字符c可能为Y
对于100%的数据,所有的f值满足1<=f<=10000
长方形(rectangle.pas/c/cpp)
【题目描述】
小明今天突发奇想,想从一张用过的纸中剪出一个长方形。

为了简化问题,小明做如下的规定:
(1)这张纸的长度、宽度分别为n,m。

小明将这张纸看成是由n*m个格子组成,在剪的时候,只能沿着格子的边缘剪。

(2)这张纸有些地方小明以前在上面画过,剪出来的长方形不能含有以前画过的地方。

(3)剪出来的长方形的大小没有限制。

小明看着这张纸,想到了好多好多种剪的方法,可是到底有多少种呢?小明数不过来了,你能帮帮他吗?
【输入格式】
第一行两个正整数,n,m,表示这张纸的长度和宽度。

接下来有n行,每行m个字符,每个字符为‘*’或者‘.’。

字符‘*’表示以前在这个格子上画过,字符‘.’表示以前在这个格子上没有画过。

【输出格式】
仅一个整数,表示方案数。

【输入样例】
6 4
....
.***
.*..
.***
...*
.***
【输出样例】
38
【数据规模】
对于10%的数据,满足1<=n<=10,1<=m<=10
对于30%的数据,满足1<=n<=50,1<=m<=50
对于60%的数据,满足1<=n<=200,1<=m<=200
对于100%的数据,满足1<=n<=1000,1<=m<=1000
最后一个点所有的字符都为‘.’。

收费站(cost.pas/c/cpp)
【题目描述】
在某个遥远的国家里,有n个城市。

编号为1,2,3,……,n。

这个国家的政府修建了m条双向的公路。

每条公路连接着两个城市。

沿着某条公路,开车从一个城市到另一个城市,需要花费一定的汽油。

开车每经过一个城市,都会被收取一定的费用(包括起点和终点城市)。

所有的收费站都在城市中,在城市间的公路上没有任何的收费站。

小红现在要开车从城市u到城市v(1<=u,v<=n)。

她的车最多可以装下s升的汽油。

在出发的时候,车的油箱是满的,并且她在路上不想加油。

在路上,每经过一个城市,她要交一定的费用。

如果她某次交的费用比较多,她的心情就会变得很糟。

所以她想知道,在她能到达目的地的前提下,她交的费用中最多的一次最少是多少。

这个问题对于她来说太难了,于是她找到了聪明的你,你能帮帮她吗?
【输入格式】
第一行5个正整数,n,m,u,v,s。

分别表示有n个城市,m条公路,从城市u到城市v,车的油箱的容量为s升。

接下来有n行,每行1个正整数,fi。

表示经过城市i,需要交费fi元。

再接下来有m行,每行3个正整数,ai,bi,ci(1<=ai,bi<=n)。

表示城市ai和城市bi之间有一条公路,如果从城市ai到城市bi,或者从城市bi到城市ai,需要用ci升汽油。

【输出格式】
仅一个整数,表示小红交费最多的一次的最小值。

如果她无法到达城市v,输出-1。

【输入样例1】
4 4 2 3 8
8
5
6
10
2 1 2
2 4 1
1 3 4
3 4 3
【输出样例1】
8
【输入样例2】
4 4 2 3 3
8
5
6
10
2 1 2
2 4 1
1 3 4
3 4 3
【输出样例2】
-1
【数据规模】
对于60%的数据,满足n<=200,m<=10000,s<=200
对于100%的数据,满足n<=10000,m<=50000,s<=1000000000
对于100%的数据,满足ci<=1000000000,fi<=1000000000,可能有两条边连接着相同的城市。

相关主题