战役(battle)

  传送门

题意简述:

  在同一条线段上给定一些不同颜色的点

  求一点使得每一个颜色中离它最近的点到它的距离的平方之和最小

  (现在沉迷于画图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:

猜你喜欢

转载自www.cnblogs.com/forward777/p/10338825.html