美团秋招笔试题目 – 20220917

共5道算法题,一题82%,一题18%,其余没做出来。

1. 调整数组

时间限制: 3000MS
内存限制: 589824KB
题目描述:
小团喜欢完整且连续的东西,比如连续的一段整数,如3 4 5 6 7。如果一个数组在按升序或降序排序之后是连续的一段整数,那么他会觉得这个数组很好看。现在小团有一个可能不那么好看的数组,而他想通过数次形如“将第k个元素加1”或“将第k个元素减1”的操作将其变成好看的数组。他想知道至少要进行多少次操作才能将他的这个数组变成他认为好看的数组。

输入描述:
第一行有一个正整数n(1<=n<=1000),代表数组中的个数。
第二行有n个空格隔开的整数,代表数组中的n个数。这些数大小在1到10000之间。

输出描述:
输出一个非负整数,代表所求的答案。

样例输入:
5
7 3 11 5 2
样例输出:
7

提示:
其中一个最优解为将第五个元素2调整成4,将第三个元素11调整成6,最后得到的数组是7 3 6 5 4。这个数组排序之后可以得到一段连续的整数3 4 5 6 7,因此是一个小团觉得好看的数组。

2. 组队

时间限制: 3000MS
内存限制: 589824KB
题目描述:
小团所在的游戏工会最近接到了许多相同的任务。每个任务都需要两位玩家组队参与。设组队的两个玩家的等级分别为a和b,则a+b必须大于等于x 且a*b必须大于等于y。现在小团想知道在工会内部有多少合法的组队方式。

输入描述:
第一行有三个正整数n,x,y(2<=n<=100000,1<=x,y<=1000000),分别代表工会中的玩家数,组队玩家等级之和的下限,组队玩家等级之积的下限。
第二行有n个数,第i个代表工会中第i个玩家的等级。
等级均为不超过1000的正整数。
数字间两两有空格隔开。

输出描述:
输出一个非负整数,代表所求的答案,即有多少种合法的组队方式。

样例输入:
5 6 8
3 4 2 5 1
样例输出:
5

提示:
(2,4) (2,5) (3,4) (3,5) (4,5)为可行的五种组队方案。

3. 魔法筒

时间限制: 3000MS
内存限制: 589824KB
题目描述:
小团有n个球,编号为1到n。有一天,这n个球掉进了两个魔法筒里面。每个魔法筒可以视为一个栈,即按顺序掉进去的球只能以逆序取出来。魔法筒上面附有的魔法使得小团每次只能从桶的顶端拿走当前仍在两个桶中的所有球中编号最小的球,或者将顶端的球放入另一个魔法筒。现在小团想知道他至少要操作多少次才能将所有球都从桶中取出。每次操作即从桶中拿出一个球或将一个球从一个桶的顶端移入另一个桶。

输入描述:
第一行有三个正整数n,x,y(2<=n<=1000,1<=x,y<=n-1,x+y=n),分别代表球的总数,第一个桶中的球数和第二个桶中的球数。
第二行有x个数,依次代表第一个桶中从底端到顶端的x个球。
第三行有y个数,依次代表第二个桶中从底端到顶端的y个球。
保证编号为1到n的每个球均恰好在一个桶中出现。

输出描述:
输出一个非负整数,代表所求的答案。

样例输入:
5 2 3
3 4
2 5 1
样例输出:
8

提示:
先将1号球取出,将5号球放入第一个桶,取出2号球,然后将第一个桶中的5号球和4球依次倒入第二个桶,取出3号球,然后取出第二个桶中的4号球和5号球,共8次操作。

4. 排序

时间限制: 3000MS
内存限制: 589824KB
题目描述:
小美有n个蓝色的球,上面分别写着1到n。小团有n个红色的球,上面也写着1到n。有一天,神秘人把这2n个球混到了一起并排成了一列。在将这2n个球分开之前,小美和小团必须通过进行数次“交换相邻的两个球”的操作使得任意两个分别写着 i 和 i+1的同色球,有 i 在 i+1的左边。现在小美和小团想知道它们需要进行多少次操作才能达成条件。

输入描述:
第一行有一个正整数n(1<=n<=200),代表球的个数。
第二行有2n个整数,代表从左到右的2n个球。正数代表红球,负数代表蓝球。-n到n之间的每个非零整数均会出现恰好一次。

输出描述:
输出一个非负整数,代表所求的答案。

样例输入:
4
3 -3 1 -4 2 -2 -1 4
样例输出:
10

提示:
最终调整为1 2 3 -1 -2 -3 -4 4,共十次操作。可以证明在这个样例中至少需要进行十次操作才能达成条件。

5. 小树

时间限制: 3000MS
内存限制: 589824KB
题目描述:
小美有一颗树,她想知道这棵树是不是一颗正常的小树。小美认为小树是正常的有这样的条件:可以给树选定一个根P,如此任意一个节点的值均比其儿子节点的值的最小值小(如果有儿子的话)
树是一种无向无环连通图。如果节点x到树根P的最短路径上需要经过的第一个点是y,那么x是y的儿子。根P不是任何节点的儿子。

输入描述
多组数据。数据开头一个数T表示数据组数。
对于每组数据:
第一行一个正整数n,表示树上节点数。
接下来一行n-1个数a1,a2,…,an-1 。
接下来一行n-1个数b1,b2,…,bn-1。
其中(ai,bi)表示节点ai与节点bi相连。保证是一颗合法的树。
接下来一行n个数 v1,v2,…,vn, 表示节点i的值为vi。
数字间两两有空格隔开。
1≤n≤50000,1≤ai,bi≤n,1≤vi≤109, 1≤T≤5

输出描述:
对每组数据一行一个整数表示答案,如果不存在这样的根输出-1,否则输出树根的节点编号。

样例输入:
2
3
1 1
2 3
1 1 2
3
1 1
2 3
1 2 3
样例输出:
-1
1

提示:
对第一组无论如何都满足不了。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注