题意简述:
在同一条线段上给定一些不同颜色的点
求一点使得每一个颜色中离它最近的点到它的距离的平方之和最小
(现在沉迷于画图qwq)
思路:
首先是数学推导 这个很简单啦
设x为选的点的横坐标 a,b,c...为选中的不同颜色的点
则平方之和为 (a-x)2+(b-x)2+....
是一个二次函数啊 x=(a+b+...)/n时取得最小值 最小值为 a2+b2+...-(a+b+...)2/n
到这里可以发现 只要知道a,b,c....我们就可以求解了
于是最暴力的方法就是枚举a,b,c...所有的取值情况 判断 取min
这样子是30分的
优化一下:
我们从最左边开始处理
假设最初x取在最左边 每种颜色自然是取离x最近的一点 就在这里优化
可以发现当一种颜色要换一个点的时候 必然是过了这点和前一同色点的中点
然后我们就可以根据预处理出同色点变换的位置
然后在这种要变换的位置就可以求出两解 (取左边的点和取右边的点)
和ans比较即可
但是如果每次求解都要重新计算 那.......
所以我们可以记录 a+b+.... 与 a2+b2... 每次变换点的时候把这两个值稍作改变即可
CODE: