FDFZ2009-补充练习题-1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

来源:PKU ’2136

练习一垂直直方图

输入4行全部由大写字母组成的文本,输出一个垂直直方图,给出每个字符出现的次数。注意:只用输出字符的出现次数,不用输出空白字符,数字或者标点符号的输出次数。

输入包括4行由大写字母组成的文本,每行的字符的数目不超过80个。

输出包括若干行。其中最后一行给出26个大写英文字母,这些字母之间用空格隔开。前面的几行包括空格和#号,每个字母出现几次,就在这个字母的上方输出一个#号。注意:输出的第一行不能是空行。输入输出样例见下页

样例输入

THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG. HISTOGRAM PROGRAM.

HELLO!

样例输出

提示:直接模拟,注意不要输出多余的空格。

练习二倾斜的(skew)二进制数

正常的十进制和二进制我们都知道,如:

307(10) = 3 * 10^2 + 0 * 10^1 + 7 * 10^0 = 300 + 0 + 7 = 307(10)

1101(2) = 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 8 + 4 + 0 + 1 = 13(10)

上面的数字307、1101其实是系数。现有一种特殊的二进制,系数的权重不再是2^k,而是2^(k+1)-1,如:1102(skew)=1*(2^4-1) + 1*(2^3-1) + 0*(2^2-1) + 2*(2^1-1) = 24(10)

现输入这种特殊的二进制数,请输出对应的十进制数。数据规模:换算后的十进制数不会超过2^31-1

样例输入:11111000001110000101101102000

样例输出:1041110737

提示:数据规模较大

来源:PKU’1565

练习三区间的并集

数轴上现有N个闭区间[ai, bi],1 ≤i ≤N,左右端点都是整数。请求出这些区间的并集∪[xi, yi]。在你求出的并集中,不相交的闭区间的数量应该最少,并且输出按照区间的升序排列。即如果说两个区间[a, b]和[c, d]是按照升序排列的,那么我们有a ≤b < c ≤d。

输入格式:

第一行包含一个整数N,1 ≤N ≤100,为闭区间的数目。

以下N行,每行两个整数,分别表示第i个区间的左右坐标。

输出格式:

输出计算出来的不相交的区间。

每一行都是对一个区间的描述,包括两个用空格分开的整数,为区间的上下界。你应该把区间按照升序排序。

输入输出样例见下页

来源:PKU’1089

练习四连续质数的和

有些正整数可以表示为一个或多个连续质数的和。

如41有三种表示方法:41=41=2+3+5+7+11+13=

11+13+17,又如20虽然可以表示为7+13或3+5+5+7,但因为不是连续的质数,所以20不具有这种特征。

你的任务是对于给定的N,计算有多少种符合条件的表示方法。

输入仅一行,表示N ,2≤N≤10000 。

输出仅一行,表示符合条件的方法数量。

样例输入对应输出

6660( 666无法表示)

121( 12=5+7 只有一种)

532( 53=53=5+7+11+13+17 有两种)

来源:PKU’2739

这道题属于“将一个数分解成连续数的和的方法个数”

解法提示

本题的数据范围不大,第一步可以把10000以内的质数先求出来,存在一个数组内。

第二步的方法可以采用枚举试探法,在素数数组中寻找到第一个大于N的素数,然后从此位置倒推,计算连续素数的和,如果大于N则向前退一步;如果等于N,计数器加一,向前退一步;如果小于N则继续加下一个小素数。

注意边界的值容易出错。

类似的题目是PKU’2140 以及PKU’2853,但这两题可以找数学规律简化运算,建议也去做一下。

你有一条由N 个红r 色、白w 色、蓝b 色的珠子组成的项链,珠子是随意安排的。这里是N=29 的二个例子,第一和第二个珠子在图片中已经被作记号:

1 2 1 2

r b b r b r r b

r b b b

r r b r

r r w r

b r w w

b b r r

b b b b

b b r b

r r b r

b r r r

b r r r

r r r b

r b r r r w

图片A 图片B

图片A 中的项链可以用字符串表示:brbrrrbbbrrrrrbrrbbrbbbbrrrrb .

练习五破碎的项链(经典必做题)

假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在另一端做同样的事。(颜色可能与在这之前收集的不同) 确定应该在哪里打破项链来收集到最大多数的数目的子。举例来说,在图片A 中的项链,可以收集到8个珠子,在珠子9 和珠子10 或珠子24 和珠子25 之间打断项链。在一些项链中,包括白色的珠子如图片B 所示。当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。表示项链的字符串将会包括三符号r ,b 和w 。写一个程序来确定从一条被供应的项链最大可以被收集珠子数目。

输入:第1 行: N,珠子的数目,3≤N≤350

第2 行: 一串度为N的字符串,每个字符是r ,b 或w

样例输入29

wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

输出:单独的一行包含从被供应的项链可以被收集的珠子数目的最大值。

如上述对应的输出为11

提示:把两个相同的项链连接在一起,运算会方便不少。

来源:USACO /usacogate

相关文档
最新文档