CQOI2012]组装

solution:

博主并不会模拟退火,所以用了差分数组加贪心吗。我们先来看题:

  1. 在数轴上的某个位置修建一个组装车间
  2. 到组装车间距离的平方的最小值。
  3. 1<=n<=20000

心路历程:

  1. 在一条直线上
  2. 距离的平方?(二次函数?)
  3. 1<=n<=10000?(nlogn(logn.....)?)

嗯?乍一看还真不知道怎么做啊!

可是在x轴上?还要距离的平方,好像几个二次函数加一起还是二次函数来着?

莫非?这整体就是一个单峰函数?

好吧,零件种类有多种,但(既然是平方)应该还是要从二次函数出手吧。

既然每种物资只能选一个的话那干脆写一个分段函数吧。|xi|<=200000,他给的又是整形,分界点最多只有400000个,好像可行

所以:

贪心:它的范围是-100000~100000,但如果我们将一个零件看成一个二次函数,数轴看成x轴,因为他们都是平方,每个零件所构成的函数都是 $ y={(x+k)}^2 $ 的形式(k表示零件在数轴上的位置)。

所以对于每一类零件,建立一个坐标轴,将零件画成二次函数的形式,这样对于每一个x值,我们贪心的选y值最小的那个零件。这样就能构成一个分段函数,而我们将每一种类的零件所构成的分段函数放在一起(用差分数组维护 $ y=ax^2+bx+c $ 中的b与c),几个二次函数加一起还是二次函数,虽然分的段特别多,但绝对在我们的承受范围内,然后我们用二次函数求最小值的公式把最小值求出来即可(最小值可以在段外!!!)

零件位置给的是整形,分段的点的小数部分绝对为0或0.5,我们在差分数组前先处理一下(乘个二,加上200001,避免负数)(当然!你也可以用莫对思想维护!(比如鸽王发的那篇题解))

code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define db double
#define rg register int
using namespace std;
struct su{
int x,y;
}t[200005]; int n,m,l,r;
ll s[800015];
ll v,k[800015];//请不要吝啬您的long long和double
db a,b,c,res=(ll)1<<50,ans,tot;//res初值赋大些 inline bool cmp(su x,su y){
return x.y==y.y?x.x<y.x:x.y<y.y;
} int main(){
//freopen("battle.in","r",stdin);
//freopen("battle.out","w",stdout);
cin>>n>>m;a=n;
for(rg i=1;i<=m;++i)
cin>>t[i].x>>t[i].y;
sort(t+1,t+m+1,cmp);
for(rg i=1;i<=m;++i){
if(t[i].y!=t[i-1].y)l=1;
else l=t[i].x+t[i-1].x+400001;
if(t[i].y!=t[i+1].y)r=800002;
else r=t[i].x+t[i+1].x+400001;
v=-2*t[i].x;s[l]+=v;s[r]-=v;
v>>=1;v=v*v;k[l]+=v;k[r]-=v;
}
for(rg i=1;i<=800001;++i){
b=b+s[i];c=c+k[i];tot=c-(b*b)/(4*a);
if(tot<res)res=tot,ans=-b/(2*a);
}printf("%.4lf",ans);
return 0;
}

[CQOI2012]组装 (贪心)的更多相关文章

  1. [CQOI2012]组装 贪心

    [CQOI2012]组装 贪心好题. LG传送门 首先有一个必须要能推的式子:设第\(i\)种零件选的生产车间位置为\(x _ i\),组装车间位置为\(x\), 则总的花费为 \[f(x) = \s ...

  2. 【BZOJ2666】[cqoi2012]组装 贪心

    [BZOJ2666][cqoi2012]组装 Description 数轴上有m个生产车间可以生产零件.一共有n种零件,编号为1~n.第i个车间的坐标为xi,生产第pi种零件(1<=pi< ...

  3. Luogu3162 CQOI2012 组装 贪心

    传送门 如果提供每一种零件的生产车间固定了,那么总时间\(t\)与组装车间的位置\(x\)的关系就是 \(t = \sum (x-a_i)^2 = nx^2-2\sum a_ix + \sum a_i ...

  4. luogu P3162 [CQOI2012]组装

    传送门 mdzz,为什么这题有个贪心的标签啊qwq 首先考虑每一种车间,对于每相邻两个车间,在中点左边那么左边那个会贡献答案,在右边就右边那个更优 所以总共会有m-1个这样的分界中点,然后最多有m+1 ...

  5. BZOJ 2666: [cqoi2012]组装

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2666 题意:n种零件,m个位置,每个位置有一种零件.求一个位置x,使得cost(1 ...

  6. P3162 [CQOI2012]组装

    传送门 退火大法好 我并不会正解于是只好打退火了--其他没啥好讲--只要对每一种颜色开一个vector,存一下所有这个颜色的位置,判定的时候可以去所有的颜色里二分找到前缀和后缀,把和当前点距离小的加入 ...

  7. 【题解】P3162CQOI2012组装

    [题解][CQOI2012]组装 考虑化为代数的形式,序列\(\left[a_i \right]\)表示选取的\(i\)种类仓库的坐标. \(ans=\Sigma(a_i-x)^2,(*)\),展开: ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. [BZOJ2667][cqoi2012]模拟工厂 贪心

    2667: [cqoi2012]模拟工厂 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 184[Submit][Status] ...

随机推荐

  1. gitlab搭建与配置说明

    1. 概述 Gitlab分为社区版和企业版,此次安装的是社区版(gitlab-ce). 2. 准备 本次使用系统为Ubuntu16.04. 3. 安装 添加GitLab仓库,并安装到服务器上(将git ...

  2. Jenkins之发送html附件邮件配置

    邮件配置: 邮件内容范例: ${FILE,path="C:\\Users\\Administrator\\.jenkins\\workspace\\XXX自动化测试工程目录\\$JOB_BA ...

  3. 如果filename的value有值 说明支持存储

    如果filename的value有值 说明支持存储

  4. c++ 为自定义类添加stl遍历器风格的遍历方式

    为仿照stl的遍历风格,实现对自定义类型的遍历. 1. 需要遍历的基础结构: struct ConnectionPtr { int id_; int port_; string addr_; //st ...

  5. pgm17

    这部分讨论决策理论与 PGM 的关系,一个主要的思路就是将决策与 PGM 的 inference 完美的融合在一起. MEU 为了引入决策理论中的 maximum expected utility 原 ...

  6. VMware Linux虚拟机yum源更换成国内阿里源

    [虚拟机系统] Centos 6.8 阿里源:https://opsx.alibaba.com/mirror 网易源:http://mirrors.163.com/ 更换yum源时请保证虚拟机和外网是 ...

  7. 自学Python1.6-Centos内英文语法切换

    自学Python之路 自学Python1.6-Centos内中英文语法切换 测试采用是官方Centos7.0系统 1.添加中文输入法 打开设置---区域和语言--->在输入源最下面有一个 + 号 ...

  8. [luogu5002]专心OI - 找祖先

    [传送门] 我们还是先将一下算法的步骤,待会再解释起来方便一点. 算法步骤 首先我们算出每个子树的\(size\). 我们就设当前访问的节点 然后我们就得到了当前这个节点的答案是这个树整个的\(siz ...

  9. cf827D Best Edge Weight (kruskal+倍增lca+并查集)

    先用kruskal处理出一个最小生成树 对于非树边,倍增找出两端点间的最大边权-1就是答案 对于树边,如果它能被替代,就要有一条非树边,两端点在树上的路径覆盖了这条树边,而且边权不大于这条树边 这里可 ...

  10. A1025. PAT Ranking

    Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...