[CQOI2012]组装 (贪心)
solution:
博主并不会模拟退火,所以用了差分数组加贪心吗。我们先来看题:
- 在数轴上的某个位置修建一个组装车间
- 到组装车间距离的平方的最小值。
- 1<=n<=20000
心路历程:
- 在一条直线上
- 距离的平方?(二次函数?)
- 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]组装 (贪心)的更多相关文章
- [CQOI2012]组装 贪心
[CQOI2012]组装 贪心好题. LG传送门 首先有一个必须要能推的式子:设第\(i\)种零件选的生产车间位置为\(x _ i\),组装车间位置为\(x\), 则总的花费为 \[f(x) = \s ...
- 【BZOJ2666】[cqoi2012]组装 贪心
[BZOJ2666][cqoi2012]组装 Description 数轴上有m个生产车间可以生产零件.一共有n种零件,编号为1~n.第i个车间的坐标为xi,生产第pi种零件(1<=pi< ...
- Luogu3162 CQOI2012 组装 贪心
传送门 如果提供每一种零件的生产车间固定了,那么总时间\(t\)与组装车间的位置\(x\)的关系就是 \(t = \sum (x-a_i)^2 = nx^2-2\sum a_ix + \sum a_i ...
- luogu P3162 [CQOI2012]组装
传送门 mdzz,为什么这题有个贪心的标签啊qwq 首先考虑每一种车间,对于每相邻两个车间,在中点左边那么左边那个会贡献答案,在右边就右边那个更优 所以总共会有m-1个这样的分界中点,然后最多有m+1 ...
- BZOJ 2666: [cqoi2012]组装
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2666 题意:n种零件,m个位置,每个位置有一种零件.求一个位置x,使得cost(1 ...
- P3162 [CQOI2012]组装
传送门 退火大法好 我并不会正解于是只好打退火了--其他没啥好讲--只要对每一种颜色开一个vector,存一下所有这个颜色的位置,判定的时候可以去所有的颜色里二分找到前缀和后缀,把和当前点距离小的加入 ...
- 【题解】P3162CQOI2012组装
[题解][CQOI2012]组装 考虑化为代数的形式,序列\(\left[a_i \right]\)表示选取的\(i\)种类仓库的坐标. \(ans=\Sigma(a_i-x)^2,(*)\),展开: ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [BZOJ2667][cqoi2012]模拟工厂 贪心
2667: [cqoi2012]模拟工厂 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 367 Solved: 184[Submit][Status] ...
随机推荐
- Tomcat server.xml中Connector配置参数详解
Tomcat中Connector常用配置 Tomcat中server.xml有些配置信息是需要我们了解的,最起码知道如何进行简单的调试. <Connector port="8080&q ...
- maven编译的时候跳过test
方式1:用命令带上参数 mvn install -Dmaven.test.skip=true 方式2:在pom.xml里面配置 <plugin> <groupId>org.ap ...
- BZOJ5010 FJOI2017矩阵填数(容斥原理)
如果只考虑某个子矩阵的话,其最大值为v的方案数显然是vsize-(v-1)size.问题在于处理子矩阵间的交叉情况. 如果两个交叉的子矩阵所要求的最大值不同,可以直接把交叉部分划给所要求的最大值较小的 ...
- JS中Number(),parseInt(),parseFloat()和自动类型转换
[参考来源] https://www.cnblogs.com/yi0921/p/6196841.html https://blog.csdn.net/u010200222/article/detail ...
- pandas merge
merge pandas的merge方法提供了一种类似于SQL的内存链接操作,官网文档提到它的性能会比其他开源语言的数据操作(例如R)要高效. merge的参数 on:列名,join用来对齐的那一列的 ...
- 装VS2012失败
有一种可能的问题是:注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_R ...
- 【loj3054】【hnoi2019】鱼
题目 描述 难以描述.......慢慢看..: https://loj.ac/problem/3054 范围 $6 \le n \le 1000 , 1 \le |x| , |y| \ ...
- Linux运行Java出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错
在运行如下程序时出现“Exception in thread "main" java.lang.OutOfMemoryError: Java heap space”报错: java ...
- 02-css的选择器
css的选择器:1.基本选择器 2.高级选择器 基本选择器包含: 1.标签选择器 标签选择器可以选中所有的标签元素,比如div,ul,li ,p等等,不管标签藏的多深,都能选中,选中的是所有的,而不是 ...
- pyglet -- 视频播放器 (简单实现,效果不是太好,切换资源会卡死)(三)
实现一个简单的视频播放器,效果不是很好.这里不多说,直接贴代码了. #-*- coding:gbk -*- import pyglet import os from pyglet.gl import ...