字節跳動2020-ByteCamp暑期夏令營研發組習題


單項選擇題

  1. 箱子里有20個紅球,18個白球,逐一隨機抽取球,問整個過程中箱外白球至少有一次和箱外紅球相等的概率。
  2. 求f(x)=x-sinx的零點個數

多項選擇題

  1. 假設在單核無超線程CPU場景下執行如下代碼「x=x+1,y=y+x」,有三個線程分別執行這段代碼,在所有線程開始前,假設有2個變量x,y,x和y都被初始化為1,x和y值會且只會被這三個線程修改,線程隨時會被搶占,設該代碼均為原子的,則可能得到的結果?

填空題

  1. 有一台機器,可批量輸入單詞,會返回其翻譯值,但是不知道對應關系,現有1000個單詞,問最少需要()次才可以確定它們的翻譯。
  2. 幼兒園阿姨買了很多糖果,讓6位小朋友早上自己分糖果,第一個先分成相等6堆,結果發現多出來1顆,於是他吃了一顆然后拿走一堆,剩下五堆;第二個小朋友把五堆合在一起,又分了6堆,結果發現又多了一個,於是他也吃了一顆拿走一堆,剩下的亦如此。問阿姨至少買了多少顆糖。

編程題

  1. 題目描述:

    小包有一個紀念日,他特別喜歡這個日子,於是把它以"DD-MM-YYYY" (如:31-01-2020,代表2020年1月31日) 的格式記錄了下來。但小包不想被別人知道這個日子,於是他將這個日子與很多別的日子寫在一起,且該日子的出現次數最多。
    小包不小心忘記了紀念日到底是哪天,所以小包現在需要從之前的記錄中找到這個紀念日。

    輸入描述:

    一行一個字符串,其中只包含數字和字符"-",字符串長度不超過10^5。
    2001 <= YYYY <= 2020
    01<=MM<=12
    DD滿足每個月份的日期數,需要考慮閏年的2月
    MM和DD不夠兩位數時會填充前導0,如2020年1月1日會寫成01-01-2020而不是1-1-2020。
    輸入保證一定存在一個符合要求的合法的日期,且保證一定存在一個日期出現次數嚴格大於別的日期出現次數。

    輸出描述:

    紀念日日期,以DD- MM-YYYY"的格式。

    示例1:

    輸入:20-12-2030-12-2020

    輸出:30-12-2020

    說明:符合條件的日期只有30-12-2020這一個。注意數據中的20-12-2030年份超出了2001 <= YYYY <= 2020范圍,因此不計算在內。

  2. 題目描述:

    字節跳動有很多個機房,每個機房可能會有很多個網段(如 10.1.2.0/24),網段之間會有包含關系,當出現包含關系時,以小的網段為准。如機房1對應網段10.1.0.0/16,機房2對應網段10.1.2.0/24,那么現在有一個IP 10.1.2.3,其應當歸屬於機房2。

    公司內我們經常會遇到一個場景:要查詢一個IP所在的機房。請你寫一個程序,根據輸入的網段信息和所需查詢的IP給出所在的機房。為了簡化問題,在這里我們認為所有IP都是可分配的,即不考慮網段地址和廣播地址,將這兩種地址也認為是可分配地址。

    輸入描述:

    第一行包含兩個整數n和m。隨后n行,每行有兩部分組成,第一部分是機房編號,第二部分是網段信息,格式如下:
    idc net
    隨后m行,每行是一個IP,表示需要查詢的IP。
    保證所有的網段以及IP都為IPV4格式,不存在IPV6 的輸入數據。
    要注意,輸入可能存在一個大網段被多個小網段切分完畢的情況。

    數據范圍:
    對於30%的數據:1<=n<=10、1<=m<=100;
    對於60%的數據,1<=n<=1000、1<=m<=5000;
    對於100%的數據,1<=n<=5000、1<=m<=50000。

    輸出描述:

    輸出一共有m行,每行為一個整數,代表第Mi行IP對應的機房編號。
    如果所輸入的IP沒有找到對應的網段信息,就輸出-1。

    示例1:

    輸入:

    4	4   
    1 10.1.2.0/24  
    2 10.1.0.0/16   
    1 10.1.5.0/24   
    2 10.1.2.128/125  
    10.1.2.3 
    10.1.2.129
    10.3.2.1
    10.1.5.2
    

    輸出:

    1
    2
    -1
    1
    
  3. 題目描述:

    兩姐妹小蔓和小玉玩抽牌游戲:一共n張牌,兩人輪流抽排,先手者的第一次抽可以抽任意張但不可抽完,以后每次抽都只能抽取不超過上一次抽牌數的兩倍(不可不抽)。誰先抽完牌誰贏(沒得抽的算輸)。由姐姐小蔓先抽。假設該游戲會進行t輪,每輪重新給出新的n。請問先手的姐姐小蔓一共能贏其中的多少輪呢?(注:兩姐妹冰雪聰明,都會做出對自己最優的策略)

    輸入描述:

    第一行,一個數字t
    接下來t行,每行一個數字,n

    輸出描述:

    一個數字x,代表姐姐小蔓贏得輪數

    示例1:

    輸入:

    2
    4
    ​5
    

    輸出:1

    說明:

    2<=n<=1e9

    30%的數據(1<=t<=10^3)

    60%的數據(1<=t<=10^5)

    100%的數據(1<=t<=10^6)

  4. 題目描述:

    我們在使用Tensorflow等編寫神經網絡時,為了使代碼邏輯清晰,可能會造成運行時的低效。小熊寫出了如下的計算式:

    (p0-(p1 /(p0 + (p3-p4))))+ (p2*(p1 /(p0 + (p3- p4))

    在Tensorflow中可以表示為如下圖一,其中p1/ (p0 + (p3 - p4))計算了兩次。還好Tensorlfow提供的XL A(Accelerated Linear Algebra)對此進行了優化,只需計算一次,計算流程被優化為如下圖二形式。
    exe4_1

    小熊露出了滿意的笑容的同時,開始思考這個過程是怎么完成的。他已經把這個問題簡化,他使用前綴表示法來表示這些計算式,並限定操作符於{+,-, *,/},操作數為單個小寫字母。可描述如下:

    E in{a, b,...Z}
    f in{t,-,*k,/}
    F= f(E, E)
    F= f(E, F)

    令上述表達式中p0=a, p1=b, p2=c, p3=d, p4=e,前綴表示法可表示為:

    +(-(a,/(b,+(a,-(d,e)))),*(c,/(b,+(a,-(d,e)))))

    他希望能將這個表達式的計算節點優化到最少,能不能幫他寫個程序來完成這個任務?
    對於每個表達式,將其計算節點優化到最少。並將優化的子表達式以一個數字表示,這個數字指向等於此子表達式的根節點的序號。節點的序號從1開始,按前序遍歷分配,如果是重復節點則不分配編號。如"a+a"可轉換為前綴表達式"+(a,a)",第二個"a"發現第一個"a"作為節點(編號2)已經出現過,因此可優化為"+(a,2)",2表示指向編號為2的節點。

    而在"+(-(a,/(b,+(a,-(d,e)))),(c,/(b,+(a,-(d,e)))))"中,"a"和"/(b,+(a,-(d,e)))"都是重復的, 其中a第一次出現的節點編號為3,"/(b,+(a,-(d,e)))"第一 次出現的根節點"/"編號為4,因此可以優化為"+(-(a,/(b,+(3,-(d,f)))),*(c,4))"。

    輸入描述:

    第一行包含一個數字c,表示將要處理的表達式行數,不超過200行。接下來的c行每行包含一個表達式,表達式的形式由上述給出(已轉換為前綴形式,無空格,有括號)。最多包含10000個節點。

    輸出描述:

    對於每個表達式,輸出按說明中優化后的表達式。

    示例1:
    exe4_2

轉載說明

本文首先發布於個人博客上,轉載請注入聲明。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM