騰訊筆試題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\) .

相關文章
相關標籤/搜索