challenging Programming questions

challenging Programming questions,第1张

challenging Programming questions

1.Programming (20Points)
Problem 过冬
【题目描述】

土地上开了n朵名贵的花,但随着冬天的来临难以抵挡住寒风,勤劳的你需要给它们修建一个大棚让他们平安度过冬天。现在给你这n朵花的坐标,请你设计一个最小的正方形大棚,使得所有花能够平安度过冬天。(在正方形边上的花认为在大棚内部)

【输入输出格式】

第一行是一个整数n,表示有n朵花。

接下来有n行,每行两个整数x,y表示花的坐标。

输出一个整数,最小的正方形大棚的边长。

【样例】

输入:

5
-1 1
2 3
4 2
2 2
-4 0
输出:

8
【数据范围】

80%的数据满足1 ≤ n ≤ 103,-109 ≤ x,y ≤ 10^9;

100%的数据满足1 ≤ n ≤ 105,-109 ≤ x,y ≤ 10^9。

2.Programming (20Points)
Problem 统计区间字母个数
【题目描述】

设有一个字符串S,它全部由小写字母组成。

现在,老师想知道,字符串S从下标L到下标R的区间中,不同的小写字母各出现了多少次。(注意:字符串下标从0开始)

老师一共会向你询问Q次,每次都会告诉你区间的起始下标L和终止下标R。请你回答每次询问。

【输入描述】

第一行一个字符串S(长度 <= 1000)

第二行为一个整数Q(Q <= 100)

接下来有Q行,每行两个整数L和R。(0 <= L, R < 字符串S的长度))

【输出描述】

对于每次询问,输出一行结果,表示每种小写字母出现的次数。

输出格式为”<小写字母>:<出现次数>”,请按从a到z的次序,输出每种小写字母,以及对应出现的次数。用英文冒号分隔字母和次数,中间没有空格。

每两种小写字母的结果之间用一个空格隔开。

忽略出现次数为0的小写字母。

【样例输入】

abcdefgaaa
2
0 0
1 8
【样例输出】

a:1
a:2 b:1 c:1 d:1 e:1 f:1 g:1
【注释】

第一次询问,区间为[0, 0],即"[a]bcdefgaaa",因此只出现一个小写字母a。

第二次询问,区间为[1, 8],即"a[bcdefgaa]a",因此出现a两次,b~g各一次。

3.Programming (20Points)
Problem 素数间距
【题目描述】

“素数(也称质数)”是指在大于1的自然数中,除了1和它本身以外没有其他因数的自然数。如果两个素数之间没有其他素数,则称这两个素数为一对**“相邻素数”**。例如,2和3是一对“相邻素数”,3和7则不是“相邻素数”,因为在3和7之间有素数5。

请你编写一个程序,对于给定两个数字L和U所限定的区间,你需要

(1)找到一对“相邻素数”C1和C2(L ≤ C1 < C2 ≤ U),使得C2-C1最小。如果在这个区间中有多对“相邻素数”都是间距最小的,则选择其中C1+C2最小的一对。

(2)找到一对“相邻素数”D1和D2(L ≤ D1 < D2 ≤ U),使得D2-D1最大。如果在这个区间中有多对“相邻素数”都是间距最大的,则选择其中D1+D2最小的一对。

注意:在指定区间内可能没有“相邻素数”,此时请按题目要求输出。

【输入描述】

输入两个正整数L和U,且L < U。

【输出描述】

输出包括两行,第一行为区间内间距最小的“相邻素数”(数值小的在前,数值大的在后,中间为空格),第二行为区间内间距最大的“相邻素数”(数值小的在前,数值大的在后,中间为空格)。

若区间内没有相邻素数,则仅输出-1。

【样例输入1】

2 17
【样例输出1】

2 3
7 11
【样例输入2】

14 17
【样例输出2】

-1
【数据范围】

50%的数据满足1 ≤ L < U ≤ 10^5;

80%的数据满足1 ≤ L < U ≤ 10^6;

100%的数据满足1 ≤ L < U ≤ 10^9,且(U-L) ≤ 10^6;

4.Programming (25Points)
Problem 矩阵查询
【题目描述】

给你一个n*m的矩阵A=(a_ij),矩阵左上角坐标为(1,1),右下角坐标为(n,m)。现在有三种对矩阵的 *** 作:

1.A x1 y1 x2 y2 d,表示在左上角坐标为(x1,y1)右下角坐标为(x2,y2)的矩形中所有数加d,即,对于所有(x1 ≤ i ≤ x2,y1≤ j ≤ y2),执行a_ij=a_ij+d;

2.E x1 x2,表示将第x1行元素与第x2行元素交换;

3.Q x y,表示询问矩阵中坐标为(x,y)处的值为多少,即a_xy的值。

例如,给定矩阵 A=

[1,2,3]

[4,5,6]

[7,8,9]

(看成3*3矩阵,下同)

对于 *** 作“A 1 1 2 2 1”,矩阵A变为:

[2,3,3]

[5,6,6]

[7,8,9]

接着对于 *** 作“E 1 3”,矩阵A变为:

[7,8,9]

[5,6,6]

[2,3,3]

对于 *** 作“Q 3 3”,输出3。

【输入输出格式】

第一行两个整数n,m,表示矩阵有n行m列。

接下来的n行,每行m个数,表示矩阵里元素的初始值。

第n+2行有一个整数q,表示 *** 作的次数。

接下来的q行是对 *** 作的描述。

对于每个询问输出结果。

【样例】

输入:

3 4
1 2 3 4
5 6 7 8
9 10 11 12
5
A 1 1 1 2 -1
E 2 3
A 3 3 3 3 2
Q 2 2
Q 3 1
输出:

10
5
【数据范围】

50%的数据满足1 ≤ n,m ≤10:|a_ij| ≤ 200,000,q ≤ 10;

100%的数据满足1 ≤ n,m ≤100:|a_ij| ≤ 200,000,q ≤ 100,|d| ≤ 1000;

5.Programming (15Points)
Problem 擀面皮
【题目描述】

有一块1x1的方形面团(不考虑面团的厚度),其口感值为0。擀面师傅要将其擀成一个N x M(纵向长N,横向宽M)的面皮。师傅的擀面手法娴熟,每次下手,要么横向擀一下(使得横向长度增加1),要么纵向擀一下(使得纵向长度增加1)。此外,当面团(皮)的大小为a x b时,往横向擀一下会使得面的口感值上升H_ab,而往纵向擀一下则会使口感值上升V_ab。

现在,请你来将1x1的面团擀成N x M面皮。显然,从1x1的面团擀成N x M的面皮有多种不同的 *** 作序列可以实现,不同 *** 作序列下得到的最终面皮口感值也可能是不同的。请问最终得到的N x M面皮,口感值最高可为多少?

【输入描述】

第一行两个整数N,M,表示要擀出来面皮的大小(纵向长N,横向宽M)。

接下来有N行,每行M个数。第a行第b列的数值H_ab,表示当面皮大小为a x b时,横向擀一下后,面皮口感的上升值。

再接下来有N行,每行M个数。第a行第b列的数值V_ab,表示当面皮大小为a x b时,纵向擀一下后,面皮口感的上升值。 (0 < N, M < 1000,0 <= H_ab, V_ab <= 1000)

【输出描述】

输出最终得到的N x M面皮的最高的口感值。

【样例输入1】

2 3
1 2 3
4 5 6
11 12 13
14 15 16
【样例输出1】

20
【样例1解释】

一共三种擀面方法:

纵横横:11+4+5=20

横纵横:1+12+5=18

横横纵:1+2+13=16

【样例输入2】

3 3
1 0 2
2 0 2
2 2 0
0 2 2
1 2 1
2 1 2
【样例输出2】

7
【样例2解释】

最优擀面方法为:横(1) + 纵(2) + 纵(2) + 横(2) = 7

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5692857.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存