BiliBili 2021 1024程序員節題目部分解析


算法與安全賽道

題目 1

  有一根長27厘米的細木桿,在第3厘米、7厘米、11厘米、17厘米、23厘米這五個位置上各有一只螞蟻。木桿很細,不能同時通過兩只螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會后退。當任意兩只螞蟻碰頭時,兩只螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鍾可以走一厘米的距離,求所有螞蟻都離開木桿的最短時間和最長時間。(本題由UP主@IT私塾提供)

解析   當任意兩只螞蟻碰頭時,兩只螞蟻會同時調頭朝反方向走。此舉動可看作是並沒有掉頭而是穿過了對面的螞蟻。最短時間則可看作以桿中心為原點,左右兩端的螞蟻分別朝左右兩端前進,則最短時間為 11cm 處螞蟻往左走的時間 11s;最長時間可以看作左右兩端的螞蟻分別朝右左兩端前進,則最長時間為 3cm 處螞蟻往右走的時間 24s。

題目 2

  計算100到10000(包含10000)所有偶數相加結果。(本題由UP主@python學習者提供)

解析
def main(first, second):
    res = 0
    for i in range(first, second + 1, 2):
        res += i
    return res


if __name__ == '__main__':
    print(main(100, 10000))

輸出:

>>> 25002550

題目 3

  電視劇《征服》於 2003-03-18 上映,在第九集中,劉華強將賣瓜商販捅傷,假設捅人劇情發生在 2003-03-26 日,問賣瓜商販距今 2021-10-24 ,已經被捅了多少天?(本題由UP主@Jack-Cui提供)

解析
import time
import datetime


def get__days(date1, date2):
    date_1 = time.strptime(date1, "%Y-%m-%d")
    date_2 = time.strptime(date2, "%Y-%m-%d")

    date_1 = datetime.datetime(date_1[0], date_1[1], date_1[2])
    date_2 = datetime.datetime(date_2[0], date_2[1], date_2[2])
    diff_days = (date_2 - date_1).days
    return diff_days


if __name__ == '__main__':
    print(get__days("2003-03-26", "2021-10-24"))

輸出:

>>> 6787

題目 4

  密碼安全技術也屬於網絡安全領域中的重要技術,應用於網絡數據的安全加密傳輸。現有一個加密算法,加密方法很簡單:將每一個字母加5,即a加密成f,這種算法的密鑰就是5。那么這種加密算法屬於

解析   對稱加密算法

題目 5

  現有5個元素,它們各不相同,且兩兩之間可比較。我們可以通過反復比較兩個元素的大小,來找出5個元素中的中位數。請問最少用多少次比較,可以確保總能找到 5個元素的中位數?(本題由UP主@算法主義提供)

解析   6次

題目 6

  期末考試結束了,老師決定帶學生們去卷餅店吃烤鴨餅。老師看到大餅和鴨子,搞了一個活動:每人可以拿走一張餅,誰卷到的食物美味程度總和最高,誰就能獲得稱號:卷王之王!Vita很想得到“卷王之王”稱號,他的大餅可以裝下大小總和不超過500的食物,現在有7塊鴨肉和6根黃瓜,每份食物都有它的大小和美味程度。 每塊鴨肉的大小:85、86、73、66、114、51、99 每塊鴨肉的美味程度:71、103、44、87、112、78、36 每根黃瓜的大小:35、44、27、41、65、38 每塊黃瓜的美味程度:41、46、13、74、71、27 老師要求大餅里至少有一塊鴨肉和一根黃瓜。請問,Vita卷到的食物美味程度總和最大是多少?(本題由UP主@小學生Vita君提供)

解析   593

題目 7

  狸子找了一名粉絲做游戲,初始每人財富相等,每輪游戲中每個人都要付1元隨機(等概率)給兩人中的一人,記每輪游戲后最富和最窮玩家的差距為x(每個人的財富不設上下限),則在足夠多的n輪游戲后,以下描述正確的是?(本題由UP主@狸子LePtC提供)

解析   x正比於根號n增加

題目 8

  一個小孩練習爬台階,一共10級台階,小孩可以一次向上選擇爬1-3級。但是第3級和第6級台階被施加了魔法,小孩一旦踏上就會停下來就開始跳《新寶島》。那么,不讓小孩跳《新寶島》的爬法一共有多少種?(本題由UP主@魔法小分隊隊長提供)

解析
def floor(param):
    param = int(param)
    if param == 1:
        return 1
    elif param == 2:
        return 2
    elif param == 3:
        return 4
    else:
        res = floor(param - 1) + floor(param - 2) + floor(param - 3)
    return res


if __name__ == '__main__':
    print(floor(10))

輸出:

>>> 274

該算法為不跨3、6級台階算法。該題正確答案為:42

題目 9

  香鍾(又名火繩鍾)是一種使用燃燒香計時的方法,采用榆樹皮粉加入少量秸稈和自然元素,配合一定比例的水攪拌均勻后倒模制成香,根據倒模出不同長度、粗細的香,經過燃燒測量可以生產出各種單位時間的計時香,例如辰香(2小時),刻香(15分鍾)等。 土堡會戰中,上將軍安排左右前衛營於丑時出發,約定出發后5刻(1小時15分)分別從敵人大本營西側與北側奇襲敵營。營中刻香由於保管不當盡毀,目前營中只有辰香,且辰香不能折斷也無法均勻分割,作為左前衛營行軍參謀的你要拿出具體的計時方案。請問要想確定出5刻的時長,至少需要多少根辰香?(本題由UP主@黑馬程序員提供)

解析   將4柱辰香分別記為1, 2, 3, 4,將1號兩端點燃的同時將2號點燃。當1號燃盡時2號剩余1小時,此時將2號末端點燃的同時將3號點燃。2號燃盡時3號剩余90分鍾,此時將3號末端點燃的同時將4號點燃,3號燃盡花費45分鍾,則4號剩余 $120-45=75$ 分鍾。故至少需要4柱辰香。

題目 10

  半仙君和粉絲兩人打賭,每人喊1-3中的一個數並依次累加,誰先喊到30誰贏,請問先喊幾有穩贏的可能性?(本題由UP主@半仙君_提供)

解析   30減去2剩28,此時只要喊出的數字與粉絲喊出的數字之和為4便可。故先喊的數字為2。

題目 11

  共有n瓶葯和4個老鼠,其中只有一瓶毒葯,老鼠吃了1天就掛了,現在僅有1天的時間讓你找出毒葯(每瓶葯水都要由老鼠實驗喔),請問n最多等於幾?(本題由UP主@半仙君_提供)

解析   將葯瓶按順序標序。
  1. 將1~4號分別喂給4只老鼠。
  2. 將5~9號兩兩交叉喂給4只老鼠。(5、6喂給第一只,6、7喂給第二只...)
  3. 將10、11、12、13號分別同時喂給三只老鼠。(10號喂給第2、3、4只,11號喂給第1、3、4只,12號喂給第1、2、4只,13號喂給第1、2、3只)
  4. 將第14號同時喂給4只老鼠。
  第二天若只死了一只,則對應標號為毒葯。若死了兩只,則兩只老鼠中有相同序號的葯為毒葯。若死了三只,則按序區分出10、11、12、13。若死了四只則為14號。若都沒死則為15號。故n最多為15。
  根據以1、0區分是否為毒葯,該題可演化為“具有4位數的二進制數有多少種”,即“4位二進制數最大為多少”。

安全攻防挑戰賽賽道

題目 1


題目地址:https://security.bilibili.com/sec1024/q/r1.html

解析   該題目為16進制的AES加密,密文為 happy_1024_2233
  FLAG 為 a1cd5f84-27966146-3776f301-64031bb9
解密過程

題目 2


題目地址:https://security.bilibili.com/sec1024/q/r2.html

解析   進入后台,查找配置項代碼
  FLAG 為 36c7a7b4-cda04af0-8db0368d-b5166480
解密過程

題目 3



題目地址:https://security.bilibili.com/sec1024/q/r3.html

解析   不是很懂PHP,查找了相關教程把地址給蒙出來了,地址欄需要結合linux命令
解密過程   cat一下passwd文本,FLAG便出來了 解密過程   FLAG 為 9d3c3014-6c6267e7-086aaee5-1f18452a


免責聲明!

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



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