百度前端笔试
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)
snowy