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