北航软院20220713夏令营机试10道

A 220713-数组与堆

时间限制:1000ms 内存限制:65536kb

题目描述

在各类实现堆的代码中,通常选择使用一维数组去模拟堆的结构。如果在堆构建好之后,将这个一维数组输出,可以观察到他们有一些有趣的性质。我们将小根堆(最小堆)构建完成后所对应的数列,称为小根堆数列,大根堆(最大堆)构建完成后所对应的数列称为大根堆数列。

堆是最重要的数据结构之一,堆的类型有2种:最大堆和最小堆。对于最大堆,父结点的键值总是大于或等于任何一个子节点的键值。对于最小堆,父结点的键值总是小于或等于任何一个子节点的键值。通常堆的实现是用一维数组完成的。

给定一个长度为 n 的一维数组,请判断该一维数组是否实现了最大堆或者最小堆。如果该一维数组实现了最大堆,请输出Max heap;如果该一维数组实现了最小堆,请输出Min heap;如果该一维数组既没实现最大堆,也没实现最小堆,请输出Not a heap!

输入格式

第一行是一个正整数 T,表示数据组数。

接下来有 T 组数据:每组数据包含2行,其中第1行为正整数 n,表示一维数组的长度;第2行为 n 个正整数(每个正整数之间用空格隔开),表示该一维数组。

输出格式

对于每一组数据,输出Max heapMin heap或者Not a heap!,每个一行。

输入样例

3
6
1 2 6 5 7 13
3
5 2 1
9
3 1 4 1 5 9 2 6 5

输出样例

Min heap
Max heap
Not a heap!

数据范围

T≤20

2≤n≤100000

数据保证不会有一维数组,既实现最大堆,又实现最小堆。

B 220713-通讯录

时间限制:1000ms 内存限制:204800kb

题目描述

小明同学有一个通讯录,通讯录中有 n 条记录。对于每一条记录,分别有对方的姓名和电话号码。假设通讯录中所有的姓名都不重复,请你帮小明同学写一个程序,以姓名为输入,查询该姓名对应的电话号码。

输入

第一行为两个整数 n 和 m,其中 n 表示通讯录中记录的数量,m 表示查询的数量。

接下来的 n 行,每行2个字符串 name 和 number,其中 name 表示姓名,number 表示 name 对应的电话号码。字符串 name 和字符串 number 均不含空格。

之后出现的 m 行,每行1个字符串 query,表示需要查询的姓名。

输出

对于每一次需要查询的姓名,输出对应的电话号码。如果通讯录中没有改姓名,则输出Not Found

输入样例

2 3
alice 1234567
bob 7654321
alice
bob
catherine

输出样例

1234567
7654321
Not Found

数据范围

1≤n≤500000。

1≤m≤10000。

query 的每一位是26个小写英文字母(即a到z)之一,且字符串 name 和字符串 query 的长度不超过20。

字符串 number 的每一位是10个阿拉伯数字(即0到9)之一,且字符串 number 的长度不超过 20。

C 220713-数据位置

时间限制:1000ms 内存限制:65536kb

题目描述

给定整数 t 和一个整数数组data,查找 t 在数组data中第1次出现的位置。

输入

第1行,一个正整数 n(n≤1000000)。

第2行,n 个int型整数(可能有重复的数),这 n 个int型整数组成了数组data

第3行,多个int型整数(可能有重复的数,但总数不超过1000000个),其中第 i i i 个数记为 t i t_i ti。输入的数之间用空白符号(空格、换行、或制表符)分隔。

输出

对每一个int型整数 t i t_i ti,若其出现在数组data中,则输出其第一次出现在数组data的位置(出现在data中第几个输入的数);否则(即其未出现在数组data中),输出NO。每一个输出占一行。

输入样例1

5
1 2 3 4 5
4 5 6 7 1

输出样例1

4
5
NO
NO
1

输入样例2

9
1 2 3 4 5 5 5 5 1
4 5 5 5 1

输出样例2

4
5
5
5
1

D 220713-是否互通

时间限制:1000ms 内存限制:65536kb

题目描述

给定图 G,G 包含 n 个顶点。

现在有两种操作:

第一种:在两个顶点间添加一条边(该边是双向的,且不保证两个顶点间只会有一条相连的边)。

第二种:询问两个顶点之间是否存互通的路径。

输入

第一行2个数,顶点个数 n (2≤n≤100000),操作个数 m (1≤m≤1000000)。

接下来 m 行,每行3个整数,分别为:操作种类 op(op=1为添加新边操作,op=2为询问操作),第一个顶点编号 u (1≤u≤n),第二个顶点编号 v (1≤v≤n)。(保证 u 和 v 不相等)

输出

对于每次询问操作(op=2时),输出一行,YES表示互通,NO表示不互通。

输入样例

3 3
2 1 2
1 1 2
2 1 2

输出样例

NO
YES

E 220713-二进序列

时间限制:1000ms 内存限制:65536kb

题目描述

给定一个二进制数(该二进制数的长度可能非常长),可以对该二进制数进行以下4种操作:

(1)操作+:将该二进制数加1;

(2)操作-:将该二进制数减1;

(3)操作*:将该二进制数乘2;

(4)操作/:将该二进制数整除2;

给定一个二进制数以及包含多个操作的操作序列,求经过运算后的二进制数。

输入格式

输入包含3行:

第一行包含2个正整数n和m:n表示输入的二进制数的长度,m表示输入的操作序列所包含操作的个数。

第二行为1个字符串,用来表示输入的二进制数。该字符串的长度为n,且该字符串的每一个字符是0或者1保证输入的二进制数不包含前导零

第三行为1个字符串,用来表示输入的操作序列。该字符串的长度为mm,且该字符串的每一个字符为+-*/种的其中之一。保证运算过程不会出现负数

输出格式

输出仅包含1行:一个字符序列,表示经过运算后的二进制数(不包含前导零);如果运算结果为0,则输出0即可。

样例输入1

4 10
1101
*/-*-*-/*/

样例输出1

10110

样例输入2

5 4
10010
+//-

样例输出2

11

样例输入3

3 14
101
+**++***++

样例输出3

10010

数据范围

1≤n,m≤5×104。

F 220713-核酸队伍

时间限制:1000ms 内存限制:65536kb

题目描述

有 N 名学生在排队做核酸,被编队为 1、2、3…N,每名学生的身高都为整数。

当且仅当两名学生中间的学生身高都比他们矮时,两名学生方可看到对方。

现在,我们只知道最高的学生的身高是 H ,剩余学生的身高未知。

但是,我们还知道这群学生之中存在着 M 对关系,每对关系都指明了某两名学生 A 和 B 可以相互看见。

求每名学生的身高的最大可能值是多少。

输入格式

第一行输入整数 N,H,M,数据用空格隔开。

接下来 M 行,每行两个整数 A 和 B ,代表学生 A 和学生 B 可以相互看见,数据用空格隔开。

输出格式

一共输出 N 行数据,每行输出一个整数。

i i i 行输出的整数代表第 i i i 名学生可能的最大身高。

输入样例

9 185 5
1 3
5 3
4 3
3 7
9 8

输出样例

185
184
185
183
184
184
185
185
185

数据范围

1≤N≤5000
1≤H≤1000000
0≤M≤10000

HINT

题目给出的关系对可能存在重复

G 220713-神奇2的幂

时间限制:1000ms 内存限制:65536kb

题目描述

任意一个正整数n都可以表达成若干个2的幂相加。例如,整数9有以下10种不同的与加数排序无关的表达方式:

(1)  9=1+1+1+1+1+1+1+1+1
(2)  9=2+1+1+1+1+1+1+1
(3)  9=2+2+1+1+1+1+1
(4)  9=2+2+2+1+1+1
(5)  9=2+2+2+2+1
(6)  9=4+1+1+1+1+1
(7)  9=4+2+1+1+1
(8)  9=4+2+2+1
(9)  9=4+4+1
(10) 9=8+1

注意:在本题中,9=8+19=1+8被认为是相同的与加数排序无关的表达方式。因为它们的加数均为8和1,仅加数的顺序不同。

输入

输入仅1行:一个正整数n。

输出

输出仅1行:正整数n的与加数排序无关的表达方式的个数(由于输出的数值可能会非常大,因此输出的数值需要对1000007取模)。

输入样例

9

输出样例

10

数据范围

1≤n≤5000000。

H 220713-蓄水池

时间限制:1000ms 内存限制:65536kb

题目描述

一个蓄水池由多个不同高度的平台构成。给定一个n行m列的二维矩阵,表示该蓄水池由n×m个平台构成,同时也表明了每个平台的坐标位置。将此二维矩阵中第i行第j列的数字记为 h i j h_i^j hij ,表示处在第i行第j列的平台的高度。

在该蓄水池中,所有平台之间形成的空间凹陷区域可以用于储存水,求该蓄水池总共可以储存的水量。

输入

第一行,2个正整数n, m,分别表示蓄水池所对应的二维矩阵的行数和列数。

接下来n行,每行m个非负整数,表示该行所包含的平台的高度。

输出

一行,仅包含1个非负整数,表示该蓄水池总共可以储存的水量。

输入样例

5 5
0 1 1 1 1
1 0 3 3 2
0 3 0 0 2
2 3 0 0 3
1 2 3 3 2

输出样例

9

数据范围

1≤n,m≤200
0≤ h i j h_i^j hij≤2×104

提示

储存满水后的矩阵如下:

0 1 1 1 1
1 1 3 3 2
0 3 2 2 2
2 3 2 2 3
1 2 3 3 2

I 220713-数字塔

时间限制:1000ms 内存限制:65536kb

题目描述

给定2n−1个数,可以按照以下方式构建一个数字塔:这2n−1个数排列在数字塔的最后一层;每上一层的数的个数减2,同时该层每个位置的数的值是它正下方三个数的中位数。下图给出了一个数字塔:

XTWyGQ.jpg

数字塔最顶层的数为该数字塔的代表数。给定一个数字塔最后一层的2n−1个数,求出该数字塔的代表数。

输入格式

输入包括2行:

第一行仅一个整数n(n的含义如上述所示)。

第二行包含2n−1个整数,表示数字塔最后一层的数。

输出格式

输出仅包含一行:该数字塔的代表数

输入样例

4
1 6 3 7 4 5 2

输出样例

4

数据范围

所有数据在int范围之内,且 2≤n≤100000。

J 220713-最大化求和

时间限制:1000ms 内存限制:65536kb

题目描述

给定一个长度为n数列 A=a1,a2,…,ai,…,an,其中,1≤ i i i≤n≤2000000,−50000≤ a i a_i ai≤50000。

当给定两个整数x和y(1≤x≤y≤n),A[x:y]表示数列A从下标x到下标y的子段;同时,sum(x,y)表示子段A[x:y]中所有元素的和(即sum(x,y)= ∑ i = x y a i \sum\limits_{i=x}^{y}a_i i=xyai)。

给定两个关于数列A的子段:A[x1:y1]和A[x2:y2],当x1≤y1<x2≤y2或者x2≤y2<x1≤y1时,则A[x1:y1]和A[x2:y2]这两个子段是不相交的。

现在给定一个正整数m,请找到数列A的m个互相不相交的子段(A[x1:y1], A[x2:y2], …, A[xk:yk], …, A[xm:ym]),使得 ∑ k = 1 m s u m ( x k , y k ) \sum\limits_{k=1}^{m}sum(x_k,y_k) k=1msum(xk,yk)的值最大。

输入

输入包含2行:

第1行为2个整数m和n(m和n的含义如上述所示);

第2行为n个整数,a1, a2, …, an,用来表示数列A。

输出

输出仅1行: ∑ k = 1 m s u m ( x k , y k ) \sum\limits_{k=1}^{m}sum(x_k,y_k) k=1msum(xk,yk)的最大值。

输入样例

3 8
-1 -2 10 -3 7 -4 5 -9 3

输出样例

22
  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值