import functools
def cost(target, k): # 计算改成k个target的最小代价
costList = [0] * len(phone)
for i,x in enumerate(phone):
costList[i] = abs(target-x)
return sum(sorted(costList)[:k])
def myCmp(x,y): # 修改优先级排序
if abs(x[1])<abs(y[1]):return -1
elif abs(x[1])>abs(y[1]):return 1
else:
if x[1]>0 and y[1]<0:return -1 # 先改让数字变小的
elif x[1]<0 and y[1]>0: return 1
else:
if x[1]<0: # x,y同样变大,先改后面的
if x[0]>y[0]: return -1
else: return 1
else: # x,y同样变小,先改前面
if x[0]<y[0]: return -1
else: return 1
n, k = map(int, input().split())
phone = list(map(int,list(input())))
mi,ma = min(phone),max(phone)
targetNum,miCost = 0,sum(phone)
for x in range(mi,ma+1): # 确定修改的target
tempCost = cost(x,k)
if tempCost<miCost:
miCost,targetNum = tempCost,x
dis = [(i,x-targetNum) for i,x in enumerate(phone)] # (下标,修改代价)
order = sorted(dis, key=functools.cmp_to_key(myCmp))[:k]
for x in order:
phone[x[0]] = targetNum
print(miCost)
print("".join(map(str,phone)))
1. 选靓号
最新推荐文章于 2024-07-30 17:23:09 发布