腾讯笔试题20210321

1、链表树

时间限制:C/C++ 1秒,其余语言 2秒
空间限制:C/C++ 262144K,其余语言 524288K
64bit IO Format: %lldjava

题目描述

在牛牛所在的世界,链表是一种二叉树。
这是牛牛第一次见到链表树,他感到十分好奇,他提出了若干个问题,每次询问点x到根的路径上全部点分别是什么,你须要按照深度从小到大给出。数组

本题为核心代码模式,代码框中预设代码已经指定好类名、方法名、参数名,请勿修改或从新命名,直接返回值便可。测试

输入

{1, 2, 3, 4, 5, 6, 7}, [1, 2, 3, 4, 5, 6, 7]

输出

[{1}, {1, 2}, {1, 3}, {1, 2, 4}, {1, 2, 5}, {1, 3, 6}, {1, 3, 7}]

说明

p1

点1到根的路径上的个分别为{1}
点2到根的路径上的个分别为{1, 2}
点3到根的路径上的个分别为{1, 3}
点4到根的路径上的个分别为{1, 2, 4}
点5到根的路径上的个分别为{1, 2, 5}
点6到根的路径上的个分别为{1, 3, 6}
点7到根的路径上的个分别为{1, 3, 7}

备注

\(n\) 为树的点数,保证树的编号为 \(1\)~\(n\) 的整数且互不相同
\(m\) 为问题个数
\(2 <= n <= 10^3\)
\(0 <= m <= 10^3\)this

代码框预设代码

/*
 * class ListNode {
 *     int val;
 *     ListNode next = null;
 *
 *     public ListNode(int val) {
 *         this.val = val;
 *     }
 * }
 * /
/* class TreeNode {
 *     int val = 0;
 *     TreeNode left = null;
 *     TreeNode right = null;
 *
 *     public TreeNode(int val) {
 *         this.val = val;
 *     }
 * }
*/

class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值便可
     * 你须要返回m个指针,第i个指针指向一条链,表示第i个问题的答案
     *
     * @param root TreeNode类 指向链表树的根
     * @param b    int整型一维数组 表示每一个问题是什么
     * @return ListNode类一维数组
     */
    public ListNode[] solve(TreeNode root, int[] b) {
        // write code here
    }
}

2、数字变换

时间限制:C/C++ 1秒,其余语言 2秒
空间限制:C/C++ 262144K,其余语言 524288K
64bit IO Format: %lldspa

题目描述

如今有一个数字 \(n\) ,你能够经过下面三种变换,使得这个数字变成 \(0\) ,如今想知道最少须要变换几回
第一种变换:\(n = n - 1\)
第二种变换:若 \(n\) 是偶数,则 \(n = n / 2\)
第三种变换:若 \(n\)\(3\)的倍数,\(n = n / 3\).指针

本题为ACM模式,请经过代码实现题目,过程当中的输入输出请自行处理,处理方式参考题目输入输出描述或左侧例题。code

输入描述

输入第一行一个整数 \(T\) ,表明有 \(T\) 组测试数据
接下来 \(T\) 行,每一行为一个整数 \(n\) ,表明要变换的数。
\(1 <= T <= 100,1 <= n <= 2*10^9\)orm

输出描述

对于每组测试数据,输出一个答案表明最少须要变换的次数。blog

输入

1
10

输出

4

说明

先执行第一种变换变成 \(9\) ,执行第三种变换变成 \(3\),执行第三种变换变成 \(1\),最后执行第一种变换变成 \(0\)it

3、小K的第K小元素

时间限制:C/C++ 1秒,其余语言 2秒
空间限制:C/C++ 262144K,其余语言 524288K
64bit IO Format: %lld

题目描述

\(K\)\(n\) 个数组,而且他将数组标号为 \(1\)~\(n\) ,每一个数组有若干个元素,如今他有 \(q\) 次询问,每次询问细节以下:

  • 首先给出一个整数 \(P\) ,以后跟着 \(P\) 个互不相同的数组下标,最后给出一个整数 \(k\)
  • 你须要告诉小 \(K\) ,将这 \(P\) 个数合并起来后的第 \(k\) 小元素是多少。

本题为ACM模式,请经过代码实现题目,过程当中的输入输出请自行处理,处理方式参考题目输入输出描述或左侧例题。

输入描述

第一行包含一个正整数 \(n\) \((1<=n<=10^5)\),表示有 \(n\) 个数组。
接下来 \(n\) 行,每一行包含:

第一个数首先给出一个正整数 \(m_i\) \((1<=m_i<=10^5)\) ,表示第 \(i\) 个数组的长度。后面的 \(m_i\) 个正整数 \(a_{i,j}\) \((1<=a_{i,j}<=10^9)\) ,表示第 \(i\) 个数组的第 \(j\) 个元素。
\(n+2\) 行包含一个正整数 \(q\) \((1<=q<=10^5)\) ,表示询问的次数。

接下来 \(q\) 行,每一行包含:
首先给出一个正整数 \(p_i\) \((1<=p_i<=n)\) ,表示余姚合并的 \(p_i\) 个数组得个数。
接下来 \(p_i\) 个正整数, \(b_{i,j}\) \((a<=b_{i,j}<=n)\) ,表示第 \(i\) 次询问须要合并的第 \(j\) 个数组下标。
接下来给出一个正整数 \(k_i\)\(k_i\) 比超过合并后数组的大小。
数据保证数组中元素总数小于等于 \(10^5\) ,询问中的数组下标总数小于等于 \(10^5\)

输出描述

对于每一次询问,都须要输出一行包含一个正整数,表示合并后的数组中的第 \(k\) 小元素。

输入1

2
1 2
2 1 3
2
1 1 1
2 1 2 2

输出1

2
2

说明1

第一行输入为 \(n\) ,表明 \(2\) 个数组
接了来 \(2\) 行表示有 \(2\) 个数组,分别为数组 \(1\) 和数组 \(2\) ,数组 \(1\) 的元素为 \(2\) ,数组 \(2\) 的元素为 \(1\)\(3\)
接下来的 \(2\) 表示询问 \(2\)
询问第 \(1\) 次须要合并的数组个数为 \(1\) 个,也就是不须要合并,选中的数组为 \(1\) ,数组 \(1\) 只有 \(1\) 个元素,是 \(2\) ,第 \(1\) 小的元素也就是 \(2\) ,输出 \(2\)
询问第 \(2\) 次须要合并的数字个数为 \(2\) 个,须要合并,选中的数组为 \(1\)\(2\) ,数组 \(1\) 和数组 \(2\) 合并以后为: \([2, 1, 3]\) ,第 \(2\) 小的元素也是 \(2\) ,输出 \(2\)

输入2

5
1 1
2 2 3
3 5 10 6
4 4 58 2 1
5 1000000000 9 8 4 5
5
1 2 2
2 2 3 3
3 3 4 5 11
4 5 4 3 2 1
5 1 2 5 4 3 7

输出2

3
5
58
1
4

说明2

第一次询问,只包含第二个数组,一共有 \(2\) 个数: \(2\)\(3\) 。第 \(2\) 小的元素为 \(3\)
第三次询问,包含三个数组:第3、第四和第五,一共有 \(12\) 个数。其中第 \(11\) 小的元素为 \(58\)

4、奖金发放

时间限制:C/C++ 1秒,其余语言 2秒
空间限制:C/C++ 262144K,其余语言 524288K
64bit IO Format: %lld

题目描述

某公司年终共拿出 \(w\) 元,用于发放奖金(不须要用完)。公司共有 \(n\) 位员工(员工总数为奇数),每位员工贡献不一样,发放奖金少于 \(x_i\) 元会让他本身不满意,多余 \(y_i\) 元会让其余员工不满意。如今想提出一种奖金发放的方案,使得全部人都满意,同时使得全部员工拿到奖金的中位数最大,求这个最大的中位数?

本题为ACM模式,请经过代码实现题目,过程当中的输入输出请自行处理,处理方式参考题目输入输出描述或左侧例题。

输入描述

第一行两个正整数,员工数 \(n\) ,奖金总数 \(w\);接下来 \(n\) 行:
每行两个正整数 ,每一个人的奖金下限 \(x_i\) 、奖金上限 \(y_i\)

输出描述

一个正整数,最大的奖金中位数。

输入

3 20
8 10
1 4
7 9

输出

9

说明

三人分别发放奖金 \(10\)\(1\)\(9\) 元,奖金中位数最大为 \(9\)

备注

\(1 <= n <= 10^5\)
\(1 <= w <= 10^14\)
\(1 <= x_i <= y_i <= 10^9\)
\(\sum^{}_{}{x_i} <= w <= \sum^{}_{}{y_i}\)

5、整数倍购物

时间限制:C/C++ 1秒,其余语言 2秒
空间限制:C/C++ 262144K,其余语言 524288K
64bit IO Format: %lld

题目描述

牛牛陪牛妹来到商场购物,许久没有逛商场的牛妹像发了疯似的挑选了起来。很快,牛妹挑选出了一共 \(n\) 件商品,为了方便区别,给其编号为 \(1, 2, …, n\) ,其中,第 \(i\) 件商品的价格为 \(w_i\)

牛牛一算总额,惊人地发现,这些东西太贵了,若是所有买下的话,本身的所有身家就没了。因而,牛牛找了个借口说道:“今天银行卡限额了,只能刷出整 \(m\) 倍数的金额,这些东西,可能……”

还没等牛牛说完,牛妹就明白了牛牛的意思,因而,准备从这 \(n\) 件商品中挑选若干件,使其总额刚好为 \(m\) 的整倍数。

牛牛在一旁盘算着,若是牛妹足够聪明,在知足 \(m\) 的整倍数的条件下,她会挑出最大的商品总金额。

因此请你告诉牛牛,最坏的状况下,此次购物以后,他的所有身家还能剩下多少。

本题为ACM模式,请经过代码实现题目,过程当中的输入输出请自行处理,处理方式参考题目输入输出描述或左侧例题。

输入描述

第一行输入一个正整数 \(T\) \((1 <= T <= 10^5)\),表明测试数据的组数。

对于每组测试数据,第一次输入一个正整数 \(n, m\) (\(1 <= n <= 10^5\)\(1<= m <= 100\)) ,依次表明牛妹第一次挑出的商品数量,以及牛牛编造的整 \(m\) 倍数金额。

题目保证,全部测试数据的 \(n\) 之和不会超过 \(10^6\).

输出描述

对于每组测试数据,一行输出一个整数表明答案。

输入

2
3 3
3 6 9
3 5
9 6 3

输出

0
3

说明

第一组测试数据中,\(3 + 6 + 9 = 18\) ,是 \(3\) 的倍数,因此刚好花光牛牛的所有身家。

第二组测试数据中,要求总金额是 \(5\) 的备注,显然,对牛妹来讲,最高花费的组合为 \(9 + 6 = 15\) ,此时,牛牛的所有身家还剩下 \(3\) .

相关文章
相关标签/搜索