问题来源:【秋招突围】2024届秋招-京东笔试题-第三套_牛客网
问题描述
K小姐经营着一家蛋糕店,她的蛋糕店有 n种口味的蛋糕。这 n 种口味的蛋糕在 A 工厂和 B 工厂都有生产。
对于每种口味的蛋糕,如果 A 工厂生产的口感值为 AiA_iAi,价格为 CiC_iCi;B 工厂生产的口感值为 BiB_iBi,价格为 DiD_iDi。K小姐会比较两个工厂生产的同一口味蛋糕,如果 Ai>BiA_i > B_iAi>Bi 且 Ci<DiC_i < D_iCi<Di,那么她会选择从 A 工厂进货这种口味的蛋糕;如果 Bi>AiB_i > A_iBi>Ai 且 Di<CiD_i < C_iDi<Ci,那么她会选择从 B 工厂进货这种口味的蛋糕;如果两个工厂生产的蛋糕口感值和价格都相同,或者一个工厂口感值更高但价格也更高,那么K小姐就不会选择进货这种口味的蛋糕。
现在给定 n 种口味蛋糕在两个工厂的口感值和价格,请问K小姐最终会选择进货多少种口味的蛋糕?
输入格式
第一行输入一个整数 n,表示蛋糕的口味数量。
第二行输入 n 个整数,分别表示 A1,A2,…,AnA_1, A_2, \dots, A_nA1,A2,…,An,即 A 工厂生产的 n 种口味蛋糕的口感值。
第三行输入 n 个整数,分别表示 B1,B2,…,BnB_1, B_2, \dots, B_nB1,B2,…,Bn,即 B 工厂生产的 n 种口味蛋糕的口感值。
第四行输入 n 个整数,分别表示 C1,C2,…,CnC_1, C_2, \dots, C_nC1,C2,…,Cn,即 A 工厂生产的 n 种口味蛋糕的价格。
第五行输入 n 个整数,分别表示 D1,D2,…,DnD_1, D_2, \dots, D_nD1,D2,…,Dn,即 B 工厂生产的 n 种口味蛋糕的价格。
输出格式
输出一个整数,表示K小姐最终选择进货的蛋糕口味数量。
代码详细分析
输入部分:
n = int(input())
:这行代码首先从用户那里获取一个整数输入,并将其赋值给变量n
。不过,在后续的代码中,并没有直接使用到这个n
,可能是代码编写过程中存在部分未完成或者多余的输入获取操作。lis = []
:初始化一个空列表lis
,用于后续存储输入的数据。- 接下来的循环:
for i in range(0, 4):lis.append(list(map(int, list(input().split()))))
这个循环会执行 4 次,每次从用户那里获取一行以空格分隔的整数输入,先通过 split()
方法将输入的字符串按空格分割成字符串列表,然后通过 map(int,...)
将每个字符串转换为整数,最后再通过 list()
将映射后的可迭代对象转换为列表并添加到 lis
中。这样,lis
最终会包含 4 个子列表,每个子列表存储了一行输入的整数数据。
数据处理与字典创建部分:
A = dict(zip(lis[0], lis[2]))
和B = dict(zip(lis[1], lis[3]))
:
这里使用了zip()
函数将lis
中的特定子列表进行组合,然后通过dict()
函数将组合后的键值对创建为两个字典A
和B
。具体来说,A
的键来自lis[0]
,值来自lis[2]
;B
的键来自lis[1]
,值来自lis[3]
。
获取字典键列表与计数部分:
keyA_tast = list(A.keys()); keyB_tast = list(B.keys())
:
这两行分别获取字典A
和B
的键,并将它们转换为列表形式存储在keyA_tast
和keyB_tast
中。- 接下来的循环:
count = 0
for i in range(len(keyA_tast)):ATast = keyA_tast[i]; BTast = keyB_tast[i]AValue = A[ATast]; BValue = B[BTast]if ATast > BTast and AValue < BValue or ATast < BTast and AValue > BTast:count += 1
首先初始化一个计数变量 count
为 0。然后通过循环遍历 keyA_tast
(由于假设 keyA_tast
和 keyB_tast
长度相同,这里只遍历 keyA_tast
的长度即可同时处理两个字典对应位置的元素)。在每次循环中,获取 A
和 B
字典中对应位置的键(ATast
和 BTast
)以及对应的值(AValue
和 BValue
)。然后通过条件判断,如果满足 ATast
大于 BTast
且 AValue
小于 BValue
,或者 ATast
小于 BTast
且 AValue
大于 BTast
这两种情况之一,就将计数变量 count
加 1。
输出部分:
print(count)
:最后输出满足上述条件的元素对的数量。
n = int(input())
lis = []
for i in range(0,4):lis.append(list(map(int,list(input().split()))))
A = dict(zip(lis[0],lis[2]));B = dict(zip(lis[1],lis[3]))
keyA_tast = list(A.keys());keyB_tast = list(B.keys())
count = 0
for i in range(len(keyA_tast)):ATast = keyA_tast[i];BTast = keyB_tast[i]AValue = A[ATast];BValue = B[BTast]if ATast > BTast and AValue < BValue or ATast < BTast and AValue > BTast:count += 1
print(count)