【BZOJ2666】[cqoi2012]组装 贪心
【BZOJ2666】[cqoi2012]组装
Description
Input
Output
Sample Input
-1 3
0 1
2 3
4 2
5 2
Sample Output
题解:易证:如果已知每种零件生产车间的位置,那么组装车间的位置一定是它们的中点。(自己列列式子就知道了。)
那么我们只需要知道每种零件生产车间的位置即可,对于相邻的同种车间i和i+1,当pi<x<mid时选择i,当mid<x<pi+1时选择i+1,那么我们只需要把所有的中间点都拿出来排个序,扫一遍统计答案即可。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=100010;
int n,m,tot;
double s1,s2,ans,minn;
double x[maxn],y;
int c[maxn],last[10010],pre[maxn];
struct node
{
double pos;
int nxt;
}p[maxn];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
bool cmp(node a,node b)
{
return a.pos<b.pos;
}
int main()
{
n=rd(),m=rd();
int i;
for(i=1;i<=m;i++)
{
x[i]=rd(),c[i]=rd();
if(!last[c[i]]) s1+=x[i],s2+=x[i]*x[i];
else pre[i]=last[c[i]],p[++tot].pos=(x[i]+x[last[c[i]]])/2,p[tot].nxt=i;
last[c[i]]=i;
}
sort(p+1,p+tot+1,cmp);
ans=y=s1/n,minn=s2-2*s1*y+y*y*n;
for(i=1;i<=tot;i++)
{
s2-=x[pre[p[i].nxt]]*x[pre[p[i].nxt]],s1-=x[pre[p[i].nxt]];
s2+=x[p[i].nxt]*x[p[i].nxt],s1+=x[p[i].nxt];
y=s1/n;
if(minn>s2-2*s1*y+y*y*n) minn=s2-2*s1*y+y*y*n,ans=y;
}
printf("%.4lf",ans);
return 0;
}
【BZOJ2666】[cqoi2012]组装 贪心的更多相关文章
- [CQOI2012]组装 贪心
[CQOI2012]组装 贪心好题. LG传送门 首先有一个必须要能推的式子:设第\(i\)种零件选的生产车间位置为\(x _ i\),组装车间位置为\(x\), 则总的花费为 \[f(x) = \s ...
- Luogu3162 CQOI2012 组装 贪心
传送门 如果提供每一种零件的生产车间固定了,那么总时间\(t\)与组装车间的位置\(x\)的关系就是 \(t = \sum (x-a_i)^2 = nx^2-2\sum a_ix + \sum a_i ...
- [CQOI2012]组装 (贪心)
CQOI2012]组装 solution: 蒟蒻表示并不会模拟退火,所以用了差分数组加贪心吗.我们先来看题: 在数轴上的某个位置修建一个组装车间 到组装车间距离的平方的最小值. 1<=n< ...
- 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] ...
随机推荐
- LeetCode OJ-- Add Binary
https://oj.leetcode.com/problems/add-binary/ 对两个二进制字符串求和. 对于字符串 ans_str,求它的翻转. reverse(ans_str.begin ...
- Codeforces Gym10081 A.Arcade Game-康托展开、全排列、组合数变成递推的思想
最近做到好多概率,组合数,全排列的题目,本咸鱼不会啊,我概率论都挂科了... 这个题学到了一个康托展开,有点用,瞎写一下... 康托展开: 适用对象:没有重复元素的全排列. 把一个整数X展开成如下形式 ...
- Codeforces 903F Clear The Matrix(状态压缩DP)
题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...
- Maximum Product Subarray - LeetCode
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- 模型搭建练习2_实现nn模块、optim、two_layer、dynamic_net
用variable实现nn.module import torch from torch.autograd import Variable N, D_in, H, D_out = 64, 1000, ...
- setlocale 与 mbstowcs 的问题
C++的字符串转换函数mbstowcs使用时容易产生bug... rapidxml_utils.hpp 的file(const char*filename)函数内会异常宕机... 需要在函数最开始添加 ...
- ylb:SQL 索引(Index)
ylbtech-SQL Server: SQL Server-SQL 索引(Index) SQL 索引(Index). ylb:索引(Index) 返回顶部 --=================== ...
- .NET创建宿主设计器--DesignHost、DesignSurface.
一个窗口在运行时,是这样的: 但是,在设计时,却远比这复杂的多,它需要一个设计器对象:它仅存在于设计时,并连接到运行时存在的对象. 宿主容器 我们可以看到每个窗体和按钮均有与之相关的设计器.这两个 ...
- struts2注解总结----@Action和@Result
除了使用配置文件配置之外,还能够使用注解来配置 以下是一些经常使用的注解 介绍: @Action/@Actions: @Action指定一个类为action,相应配置文件里的<action> ...
- 设计模式之Protocol实现代理模式
使用场合 使用步骤 不使用protocol实现代理 使用protocol实现代理 一.使用场合 A想让B帮忙,就让B代理 A想通知B发生了一些事情,或者传一些数据给B 观察者模式 二.使用步骤 定义一 ...