2022年牛客多校第2场 J . Link with Arithmetic Progression (三分+枚举)

简介: 2022年牛客多校第2场 J . Link with Arithmetic Progression (三分+枚举)

题意

给一个序列,对于其中的元素可以改变为任意值,花费为差值的平方,问将其改编为等差序列的最小花费

思路

假设之前的序列为a1,a2,a3……

修改后的序列为b1,b2,b3……

首项为b1,公差为d

差值ci=ai-bi

bi=b1+(i-1)d

答案就是c1c1+c2c2+……=

(a1-(b1+(i-1)d))^2+ (a2-(b1+(i-1)d))^2+……

然后化简出来发现把公差d当作未知数得到二元一次函数

三分d来缩小范围 check的时候计算代价

知道d以后

ci=ai-bi=ai-(b1+(i-1)d)

ci+b1都是未知的,放到一侧

ci+b1=ai-(i-1)d=di

c1c1+c2c2+c3c3+……

=(d1-b1)^2+ (d2-b1)^ 2+(d3-b1)^2+……

=nb1b1-2(d1+d2+d3+……)b1+(d1 * d1+d2 * d2+d3 * d3+……)

b1是未知数

相当于ax^2+by+c求极值,当x=-b/2a时取得极值

b1=(-2(d1+d2+d3+……))/(-2n)=(d1+d2+d3+……)/n

然后在计算ci就行了

ci=di-b1

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
long double a[maxn];
long double b[maxn];
long double eps=1e-10;
int n;
long double check(long double d){
  long double res=0,sum=0;
  for(int i=1;i<=n;i++){
    b[i]=(a[i]-(i-1)*d);
    sum=sum+b[i];
  }
  sum/=n;
  for(int i=1;i<=n;i++){
    res=res+(b[i]-sum)*(b[i]-sum);
  }
  return res;
}
int main() {
  int _;scanf("%d",&_);
  while(_--){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%Lf",&a[i]); 
    long double l=-1e10,r=1e10;
    while(r-l>eps){
      long double mid1=l+(r-l)/3.0,mid2=r-(r-l)/3.0;
      if(check(mid1)>check(mid2)) l=mid1;
      else r=mid2;
      //cout<<_<<" "<<l<<" "<<r<<endl;
    }
    printf("%.10Lf\n",check(l));
  }
  return 0;
}


目录
相关文章
|
8月前
【每日一题Day213】LCP 33. 蓄水 | 枚举+贪心
【每日一题Day213】LCP 33. 蓄水 | 枚举+贪心
46 0
洛谷P2141珠心算测验 (枚举&&暴力解法)
洛谷P2141珠心算测验 (枚举&&暴力解法)
126 0
|
8月前
|
存储 算法 C++
第 284 场周赛(C++ | 枚举 | 分类讨论 | 最短路 | 建反图)
【4月更文挑战第1天】- [LeetCode 6031](https://leetcode-cn.com/problems/find-all-k-distant-indices-in-an-array/):给定数组 `nums`、键值 `key` 和距离 `k`,找到所有与键值相等且与任意下标距离不超过 `k` 的下标,返回升序排序的列表。找到最小权重。
46 0
|
机器学习/深度学习
UPC - 2022春混合个人训练赛第五场 D Seahorse Shoes(贪心+模拟)
UPC - 2022春混合个人训练赛第五场 D Seahorse Shoes(贪心+模拟)
92 0
|
存储 算法 vr&ar
【力扣·周赛】第 284 场周赛(C++ | 枚举 | 分类讨论 | 最短路 | 建反图)
【力扣·周赛】第 284 场周赛(C++ | 枚举 | 分类讨论 | 最短路 | 建反图)
137 0
【力扣·周赛】第 284 场周赛(C++ | 枚举 | 分类讨论 | 最短路 | 建反图)
codeforces144——D. Missile Silos(最短路+枚举)
codeforces144——D. Missile Silos(最短路+枚举)
100 0
codeforces144——D. Missile Silos(最短路+枚举)
|
存储
UPC组队第三场——K: A Famous Grid (BFS+细节)
UPC组队第三场——K: A Famous Grid (BFS+细节)
90 0
UPC组队第三场——K: A Famous Grid (BFS+细节)
|
机器学习/深度学习 人工智能 算法
每日一题冲刺大厂第十六天提高组 codeforces 783 div1 Half Queen
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题提高组是为了有余力的同学准备的,让大家练到各种各样的题目,一年以后,蜕变成为一个不一样的自己!
123 0
每日一题冲刺大厂第十六天提高组 codeforces 783 div1 Half Queen

热门文章

最新文章