Skip to content
On this page

百度前端笔试

2023.3.28

1.小红拿到了一个数组,其中一些数字被染成红色,另外一些数字被染成蓝色。小红准备在其中选出两个数,选出的两个数的乘积为选择的方案权值。只有当选择的两个数是一红一蓝时,该方案才是合法的。小红想知道,所有合法的选数方案的权值之和是多少?答案请对10^9+7取模。

python
MOD = 10 ** 9 + 7
n = int(input())
nums = list(map(int, input().split()))
color = list(input())
redNums = []
blueNums = []
for i in range(n):
    if color[i] == "R":
        redNums.append(nums[i])
    else:
        blueNums.append(nums[i])
print(sum(redNums) * sum(blueNums) % MOD)

2.异或。

python
t = int(input())

for _ in range(t):
    a, x = map(int, input().split())
    aBin = bin(a)[2:]
    xBin = bin(x)[2:]
    bBinLen = max(len(aBin), len(xBin))
    if len(aBin) < bBinLen:
        aBin = '0' * (bBinLen - len(aBin)) + aBin
    if len(xBin) < bBinLen:
        xBin = '0' * (bBinLen - len(xBin)) + xBin
    remain = 0
    for i in range(bBinLen):
        step = bBinLen - i - 1
        if int(aBin[i]) ^ int(xBin[i]) == 1:
            continue
        if aBin[i] == '1' or xBin[i] == '1':
            remain += 2 ** step
        else:
            if remain > 0:
                remain -= 2** step

ans = x - remain
if ans == 0: ans = 1
print(ans)

3.字符串。

python
num = input()
dotIdx = num.index('.')
pre = num[:dotIdx+1]
suc = list(map(int, num[dotIdx+1:]))

num_idx = [[suc[i], i] for i in range(len(suc))]
num_idx.sort(key=lambda x:x[0], reverse=True)

max_suc = [num_idx[0][0]]
preIdx = num_idx[0][1]

for i in range(1, len(num_idx)):
    [curNum, curIdx] = num_idx[i]
    if preIdx > curIdx:
        continue
    max_suc.append(curNum)
    preIdx = curIdx

ans = pre + ''.join([str(x) for x in max_suc])
print(ans)