题解
2024-10-08 22:31:03
发布于:湖南
21阅读
0回复
0点赞
题意其实就是计算两个向量 x 和 y 的中位数,
并计算每个向量中所有元素到中位数的绝对距离之和。
最后将这两个距离之和相加并输出。
看到很多西佳佳大佬出手了啊,
而我们痞党呢(t8都过不了),
也是得发发题解了啊,老被打压肯定不舒服 )
虽然我打排位这题用的是西佳佳()
也是根据帅同的c++代码弄了下py代码()
可以用这个 sys.stdin.read
读取所有输入数据,然后将其分割成列表 data。
然后初始化 a 数组和 x,y 列表。
根据输入的玩意填充这个 a 数组和 x、y 列表。
然后计算中位数,这个直接对 x 和 y 列表进行排序。
计算距离的话直接调用 checkx 和 checky 函数计算每个列表中所有元素到中位数的绝对距离之和。
将两个距离之和相加,保留5位小数输出就行(某人好像保留12位小数)。
代码:
import sys
def checkx(z, x):
res = 0
for i in range(len(x)):
res += abs(x[i] - z)
return res
def checky(z, y):
res = 0
for i in range(len(y)):
res += abs(y[i] - z)
return res
def main():
input = sys.stdin.read
data = input().split()
n = int(data[0])
a = [0] * (n + 1)
for i in range(1, n + 1):
a[i] = int(data[i])
x = []
y = []
index = n + 1
for i in range(1, n + 1):
sx = float(data[index])
sy = float(data[index + 1])
index += 2
for j in range(1, a[i] + 1):
x.append(sx)
y.append(sy)
m = len(x)
x.sort()
y.sort()
ansx = checkx(x[m // 2], x)
ansy = checky(y[m // 2], y)
print(f"{ansx + ansy:.5f}")
if __name__ == "__main__":
main()
这里空空如也
有帮助,赞一个