NOIP 2012复赛 模拟练习卷(一)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NOIP 2012复赛模拟练习卷(一)
1.序列(sequence.cpp/c/pas)
【问题描述】
有一个整数序列,它的每个数各不相同,我们不知道它的长度(即序列中的整数个数)是多少,但我们知道,在某些区间中至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序列中至少有Ci个数来自区间[Li,Ri]。
给定若干个这样的区间,问这个整数序列的长度最少能为多少?
【输入】(sequence.in)
第1行:一个正整数N,表示区间个数。
接下来N行:每行三个正整数Li、Ri和Ci,描述一个区间。
【输出】(sequence.out)
输出一个数,表示该整数序列的最小长度。
【输入样例】
4
4 5 1
6 10 3
7 10 3
5 6 1
【输出样例】
4
【数据规模】
N<=1000, 0<=Li<=Ri<=1000, 1<=Ci<=Ri-Li+1
2.call (call.cpp/c/pas)
【问题描述】
有M座房屋排列在一条直线上。
房屋之间会互相打电话,现在,在一些房屋之间安装了监听器,每当两个位于监听器两侧的房屋之间打了电话,监听器就计一次数。
现在知道每个监听器的位置和计数,问总共最少可能打了多少个电话。
【输入】
第一行上有两个整数N和M(N<M≤1000000000),N表示监听器个数,M表示房屋数。
接下来N行,每行两个整数P i和C i,表示第i个监听器位于房屋P i和P i+1之间,计数C i次(0≤Ci ≤100000)。
【输出】
一行,一个整数,表示最少可能打了多少个电话。
【样例输入一】
3 4
3 1
2 2
【样例输出一】
2
【样例输入二】
2 3
1 23
2 17
【样例输出二】
23
【样例输入三】
3 9
7 2
8 3
3 4
【样例输出三】
5
3.planting (planting.cpp/c/pas)
【问题描述】
在一个笛卡尔平面坐标系里(X轴向右是正方向,Y轴向上是正方向),有N(1<=N<=10)个矩形,第i个矩形的左上角坐标是(x1,y1),右下角坐标是(x2,y2)。
问这N个矩形所覆盖的面积是多少?注意:被重复覆盖的区域的面积只算一次。
【输入】(planting.in)
第一行:一个整数N(1<=N<=10);
接下来有N行:每行描述一个矩形的信息,分别是矩形的x1、y1、x2、y2,此处-10^4<=x1,y1,x2,y2<=10^4。
【输出】(planting.out)
一个整数,表示被N个矩形所覆盖的区域的面积。
【输入样例】
2
0 5 4 1
2 4 6 2
【输出样例】
20
4.moo (moo.cpp/c/pas)
【问题描述】
奶牛Bessie最近在学习字符串操作,她用如下的规则逐一地构造出新的字符串:S(0)=”moo”
S(1)=S(0)+”m”+”ooo”+S(0)=”moo”+”m”+”ooo”+”moo”=”moomooomoo”
S(2)=S(1)+”m”+”oooo”+S(1)=…=……
Bessie就这样产生字符串,直到所产生的字符串的长度不小于输入的整数N时才停止。
通过观察可以发现,第k个字符串是由:第k-1个字符串+”m”+”k+2个o”+第k-1个字符串连接起来的。
现在的问题:给定一个整数N(1<=N<=10^9),问第N个字母是”m”还是”o”?
【输入】(moo.in)
一个整数N。
【输出】(moo.out)
一个字符,m或o。
【输入样例】
11
【输出样例】
m
【样例解释】
由题目可知,字符串S(0)是moo,现在要求第11个字符,显然字符串S(0)不够长;
同样,S(1)的长度是10,也不够长;S(2)的长度是25,够长了;S(2)的第11个字符是m,故输出的答案为m。
5.集合(sets.cpp/c/pas)
【问题描述】
现有一个包含N个元素的集合S,我们要找出K个集合S1、S2、……、Sk,满足:
1、Si(1<=i<=k)是S的子集,且
2、S1∩S2∩……∩Sk=φ
现在,请你计算一下满足条件的方案数。
【输入】(sets.in)
一行:两个正整数n和k。
【输出】(sets.out)
输出一个数,即合法的方案数。
由于这个数可能很大,你只要输出这个数除以1000000007的余数即可。
【输入样例1】
1 1
【输出样例1】
1
【输入样例2】
2 2
【输出样例2】
9
【数据规模】
30%的数据: N,k <=10;
100%的数据: 1<=N, k<=2^63 – 1。
6.逃离遗迹(escape.cpp/c/pas)
【问题描述】
根据外星人的回信得知,在遗迹中分布着三样道具。
当三样道具都拿走后,遗迹很快就会自动毁灭,所以必须在最短的时间内离开。
遗迹可以看作是由N个房间(编号1..N)和N-1条长度不等的通道组成。
任意两个房间之间有且只有一条路可以相互到达。
现在,我们的队员已经在编号为A、B、C的房间内拿到了道具,并且准备撤退。
由于只有一架直升机,所以只能在一个房间上停留。
现在,请你决定将直升机停在哪一个房间之上,才能够使三人到达该房间的距离之和最短。
【输入格式】(escape.in)
第1行:四个整数N、A、B、C。
第2..N行:每行三个整数u、v、w,表示存在连接房间u、v的通道,长度为w。
【输出格式】(escape.out)
第1行:一个整数,表示汇合房间的编号。
若存在多个解,输出字典序最小的。
第2行:一个整数,表示三人到达该房间的距离之和。
【输入样例】
5 3 1 4
3 5 5
4 3 9
4 1 7
1 2 1
【输出样例】
4
16
【数据规模】
50%的数据:1<=N<=1000;
100%的数据:1<=N<=20,000。
1<=A, B, C, u, v <=N且A、B、C不相等;u、v不相等。
1<=w<=1000。