Jzoj4770 闭门造车

news/2024/10/22 18:26:51/

自从htn体验了一把飙车的快感,他就下定决心要闭门造车!但是他两手空空怎么造得出车来呢?无奈的他只好来到了汽车零部件商店。
一走进商店,玲琅满目的各式零件看得htn眼花缭乱。但是他很快便反应过来:我只要买一套好的零件就行。首先它们的性能差不能太大,否则汽车的兼容性不好,开着开着就损坏了;其次,当然是越便宜越好了!为了打造一辆顶级跑车,htn陷入了沉思……
现在商店中有 N 件零件,给出这 N 件零件的价格,其性能等于价格。htn要从中购买一套零件,即选取这个序列的一个子串(连续一段)。要求如下:
1、这一套零件个数要大于等于2(这才算一套)。
2、这套零件的性能差为首尾两个零件的性能差(htn觉得每一个都比较性能差实在是太累了)。
3、购买这套零件的价格和为它们各自价格的总和。
4、最终的总花费为 性能差²+价格和²。
5、由于商店最近有优惠活动,所以每一套零件的第一个都是免费的。

我们发现,如果令s[i]=Σa[j]{0<j<=i} 那么,answer=min((a[i]-a[j])^2+(s[i]-s[j])^2)

看到两个平方想到了什么?

平面最近点对!

采用分治法,可以自行百度,注意一下细节:

我们在分治的时候,顺便进行归并排序,这样就可以避免调用sort,将复杂度降到O(n lg n)

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 100010
#define LL long long
using namespace std;
LL x[N],y[N],a[N],b[N]; int n;
inline LL sqr(LL x){ return x*x; }
inline LL dis(int i,int j){ return sqr(x[i]-x[j])+sqr(y[i]-y[j]); }
LL merge(int l,int r){if(l==r) return 1ll<<62;int m=l+r>>1,c=l; LL d=min(merge(l,m),merge(m+1,r));for(int i=l,j=m+1;i<=m || j<=r;++i){for(;j<=r && (i>m||y[i]>y[j]);++j) a[c]=x[j],b[c++]=y[j];if(i<=m && abs(x[i]-x[m])<d)for(int k=max(m+1,j-3);k<=j+3;++k) d=min(d,dis(i,k));if(i<=m) a[c]=x[i],b[c++]=y[i];}for(int i=l;i<=r;++i) x[i]=a[i],y[i]=b[i];return d;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;++i) scanf("%lld",y+i),x[i]=y[i]+x[i-1];printf("%lld\n",merge(1,n));
}

转载于:https://www.cnblogs.com/Extended-Ash/p/8312618.html


http://www.ppmy.cn/news/147407.html

相关文章

BZOJ 4770: 图样(恶心概率期望DP)

题目 考试时推到 p p p就嫌麻烦&#xff0c;不想推了。。。 讲真写好DP预处理调一年。 时间复杂度 O ( n 4 m 2 m ) O(n^4m2^m) O(n4m2m)的代码 T E ( b u t c o r r e t ) C o d e \mathrm {TE (but \ corret)\ Code} TE(but corret) Code //#pragma GCC optimize(3) #inc…

bzoj 4770 图样 - 概率与期望 - 动态规划

题目传送门 传送门I 传送门II 题目大意 有一个$n$个点的完全图&#xff0c;每个点的权值是$[0, 2^{m})$中的随机整数&#xff0c;两点间的边的权值是两点点权的异或和&#xff0c;问它的最小异或生成树的边权和的期望。 考虑求最大异或生成树的分治做法&#xff0c;每次按最高位…

BZOJ4770 图样(概率期望+动态规划)

考虑求出所有MST的权值和再除以方案数&#xff0c;方案数显然是2mn。 按位考虑&#xff0c;显然应该让MST里的边高位尽量为0。那么根据最高位是0还是1将点集划分成两部分&#xff0c;整张图的MST就是由两部分各自的MST之间连一条最小边得到的。两部分的MST权值和可以dp得到&…

P4770-[NOI2018]你的名字【SAM,线段树合并】

正题 题目链接:https://www.luogu.com.cn/problem/P4770 题目大意 给出一个长度为 n n n的字符串 S S S。 q q q次询问给出一个串 T T T和一个区间 [ L , R ] [L,R] [L,R]&#xff0c;求 T T T有多少个本质不同的子串不是 S L ∼ R S_{L\sim R} SL∼R​的子串。 1 ≤ n ≤ 5 …

corei7 64 poky linux,Core i7-4770K Linux之旅:有喜有忧

Core i7-4770K Linux之旅&#xff1a;有喜有忧 出处&#xff1a;快科技 2013-06-09 11:37:15 作者&#xff1a;上方文Q 编辑&#xff1a;上方文Q[爆料] 收藏文章 Haswell的评测多如牛毛&#xff0c;但都是在Windows下进行的&#xff0c;Linux用户肯定看不下去了。Phoronix又…

酷睿i7cpu适合的linux,CPU性能篇 - Core i7-4770K Linux之旅:有喜有忧_Linux新闻_Linux公社-Linux系统门户网站...

CPU性能篇—— Rodinia是学术界经常使用的科学测试工具。OpenMP LavaMD负载中&#xff0c;4770K相比3770K快了12&#xff05;&#xff0c;8350表现也可以。 OpenMP Leukocyte负载里&#xff0c;4770K对比3770K的优势依然有10&#xff05;&#xff0c;但是8350大亮了&#xff0c…

HDU 4770

这道题利用DFS进行枚举就可以了。 由于图中的点很多&#xff0c;但是vulnerable room 很少&#xff0c;所以要把这些点保存起来。此外&#xff0c;由于回溯的时候判断哪些room任然被灯照射有些麻烦&#xff0c;所以用状态压缩的方式表示一个vulnerable room 被照射的状态&#…

BZOJ4770 图样

牛逼的DP&#xff0c;一股TC气息 求期望的话可以先求出所有情况的和再除以情况数 考虑 f[i][j] 表示 i 个点每个点的权值都是j位的二进制数&#xff0c;最小生成树的和 一定是最高位为0的和为1的分别的形成生成树&#xff0c;然后两部分之间连一条边 那么枚举 i 个点里有多…