有没有大佬来帮我解答下这样python语法有错吗

P1678 烦恼的高考志愿

fzukzh @ 2023-02-15 16:11:21

m,n=map(int,input().split())
m_lst=list(map(int,input().split()))
n_lst=list(map(int,input().split()))
m_lst.sort()
n_lst.sort()
w=0
for i in n_lst:
    s=20000000000
    for j in m_lst:
        if abs(i-j)<s:
            s=abs(i-j)
        else:
            break
    w+=s
print(w)

by 初雪_matt @ 2023-02-15 16:36:26

@fzukzh 没有,多半是逻辑错了


by 初雪_matt @ 2023-02-15 16:40:15

@fzukzh

m,n=map(int,input().split())
m_lst=list(map(int,input().split()))
n_lst=list(map(int,input().split()))
m_lst.sort()
n_lst.sort()
w=0
for i in n_lst:
    s=20000000000
    for j in m_lst:
        if abs(i-j)<s:
            s=abs(i-j)
    w+=s
print(w)

显然你没有理由直接break掉判断,你的判断永远在第一个人成立。


by 初雪_matt @ 2023-02-15 16:41:17

另外,此题正解为二分答案或贪心等,您的方法时间复杂度过高。


by fzukzh @ 2023-02-15 16:57:53

@初雪_matt 好的我再去改改


|