【笔试代码题记录】20190908-0913 爱奇艺/搜狗/58同城/

2019.9.8 爱奇艺劝退题

【牛客大佬全AC代码】

1. 排列计数

在这里插入图片描述
考完试才知道是原题,leetcode903

n = int(input())
data = [int(x) for x in input().split()]
dp = [1 for _ in range(len(data)+1)]
for i in data:
    if i==1:
        dp.pop(0)
        for j in range(len(dp)-2,-1,-1):
            dp[j]+=dp[j+1]
        #print(dp)
    else:
        dp.pop()
        for j in range(1,len(dp)):
            dp[j]+=dp[j-1]
        #print(dp)
mo = 1000000007
print(dp[0]%mo)

2. 红蓝球

在这里插入图片描述
解法:动态规划,dp[i][j]表示i个红球和j个蓝球A的获胜概率.如果i=0,dp[i][j]=0.如果j=0,dp[i][j]=1.否则的话dp[i][j]由下列步骤求得:
dp[i][j]+=i/(i+j);//表示A直接取得红球的概率
如果j=1,那么dp[i][j]+=0.A取蓝球之后,B肯定获胜
如果j=2,dp[i][j]+=j/(i+j)(j-1)/(i+j-1)dp[i-1][j-2];j/(i+j)是A取蓝球的概率,在A取蓝球的基础上B再取蓝球A才有获胜机会,所以(j-1)/(i+j-1)表示B再取蓝球的概率,然后C只能从红球选一个,在ABC选一轮后,A的获胜概率就要加上dp[i-1][j-2],所以A获胜的概率为j/(i+j)(j-1)/(i+j-1)dp[i-1][j-2];
如果j>2,dp[i][j]+=j/(i+j)
(j-1)/(i+j-1)
(i/(i+j-2)*dp[i-1][j-2]+(j-2)/(i+j-2)*dp[i][j-3]);i/(i+j-2)*dp[i-1][j-2]+(j-2)/(i+j-2)*dp[i][j-3]表示A从蓝球选一个,B从蓝球选一个后,C分别从红球蓝球取出一个的A的获胜概率.

tmp = input().split()
m,n=int(tmp[0]),int(tmp[1])
timesA = (m+n+1)//3
al = (m+n)
re = 0
pA = 1
cur = 1
for _ in range(timesA):
    pA = m/(m+n)
    re+=cur*pA
    #print(re)
    n-=1
    if(n<=0):
        break
    cur*=(1-pA)*(n/(m+n))
    n-=1
    if((al)%3==1 and n<=0):
        re+=cur
        break
re*=1000000
if re%10==5:
    re+=5
re/=1000000
print('{:.5f}'.format(re))

2019.9.8 搜狗三道劝退题

1.

2019.9.11 英语流利说

1. 检测有向图是否有环

这题没写出来。

2019.9.12 58同城

1. 特别简单一道题

2. 小朋友发糖果,相邻小朋友高分比低分的糖果多,最少需要多少糖果

def func(nums):
    if len(nums) == 1:
        return 1
    res = [0 for _ in range(len(nums))]
    res[0] = 1
    for i in range(1, len(nums)):
        if nums[i] > nums[i - 1]:
            res[i] = res[i - 1] + 1
        else:
            res[i] = 1

    for i in range(len(nums) - 2, -1, -1):
        if nums[i] > nums[i + 1] and res[i] <= res[i + 1]:
            res[i] = max(res[i], res[i + 1] + 1)

    return sum(res)

n = int(input())
nums = []
for i in range(n):
    nums.append(int(input()))
print(func(nums))

3. leetcode64

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章