В файле А выходит верный ответ, но под Б ответ не сходится, я полагаю, что кластеры разбил неправильно (так как при аналогичном коде для A и Б первая часть считается верно) но вот где - понять не смог. Чтобы не мучаться с файлами, приложу фото двух диаграмм под А и Б соответственно, но если будут нужны, могу скинуть и файлы. Мой корявый код: clA = [[], [], []] clB = [[], [], [], [], [], []] for line in open('27_A_18585.txt'): x, y, z = [float(k) for k in line.split()] if (y+z)/2 > 6: clA[0].append([x, (y+z)/2]) elif x < 4: clA[1].append([x, (y+z)/2]) else: clA[2].append([x, (y+z)/2]) for line in open('27_B_18585.txt'): x, y, z = [float(k) for k in line.split()] if (y+z)/2 > 8.9: clB[0].append([x, (y+z)/2]) elif (y+z)/2 > 6 and x > 3.8: clB[1].append([x, (y+z)/2]) elif x > 5: clB[2].append([x, (y+z)/2]) elif (y+z)/2 > 5: clB[3].append([x, (y+z)/2]) elif (y+z) < (-1.25*x + 5): clB[4].append([x, (y+z)/2]) else: clB[5].append([x, (y+z)/2]) def dist(A, B): x1, y1 = A x2, y2 = B return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 def cent(cl): m = [] for p in cl: sm = sum(dist(p, p1) for p1 in cl) m.append([sm, p]) return min(m)[1] kolvoA = len([x for x in clA if len(x) >= 361]) kolvoB = len([x for x in clB if len(x) >= 1706]) centA = [cent(cl) for cl in clA if len(cl) >= 361] centB = [cent(cl) for cl in clB if len(cl) >= 1706] sxA = sum(x for x, y in centA) / kolvoA * 100000 syA = sum(y for x, y in centA) / kolvoA * 100000 sxB = sum(x for x, y in centB) / kolvoB * 100000 syB = sum(y for x, y in centB) / kolvoB * 100000 print(int(sxA), int(syA)) print(int(sxB), int(syB)) Код clA = [[], [], []] clB = [[], [], [], [], [], []] for line in open('27_A_18585.txt'): x, y, z = [float(k) for k in line.split()] if (y+z)/2 > 6: clA[0].append([x, (y+z)/2]) elif x < 4: clA[1].append([x, (y+z)/2]) else: clA[2].append([x, (y+z)/2]) for line in open('27_B_18585.txt'): x, y, z = [float(k) for k in line.split()] if (y+z)/2 > 8.9: clB[0].append([x, (y+z)/2]) elif (y+z)/2 > 6 and x > 3.8: clB[1].append([x, (y+z)/2]) elif x > 5: clB[2].append([x, (y+z)/2]) elif (y+z)/2 > 5: clB[3].append([x, (y+z)/2]) elif (y+z) < (-1.25*x + 5): clB[4].append([x, (y+z)/2]) else: clB[5].append([x, (y+z)/2]) def dist(A, B): x1, y1 = A x2, y2 = B return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5 def cent(cl): m = [] for p in cl: sm = sum(dist(p, p1) for p1 in cl) m.append([sm, p]) return min(m)[1] kolvoA = len([x for x in clA if len(x) >= 361]) kolvoB = len([x for x in clB if len(x) >= 1706]) centA = [cent(cl) for cl in clA if len(cl) >= 361] centB = [cent(cl) for cl in clB if len(cl) >= 1706] sxA = sum(x for x, y in centA) / kolvoA * 100000 syA = sum(y for x, y in centA) / kolvoA * 100000 sxB = sum(x for x, y in centB) / kolvoB * 100000 syB = sum(y for x, y in centB) / kolvoB * 100000 print(int(sxA), int(syA)) print(int(sxB), int(syB))