题目大意

求形如

\[\sum_{i=1}^n |a_ix + b_i|
\]

的最小值

思路

我们显然可以先把系数 \(a\) 提出来

于是就成了 \(\sum_{i=1}^n |a_i|·|x + \frac{b_i}{a_i}|\)

对于任意一个 \(i\),它的零点在 \(-\frac{b_i}{a_i}\) 处

而我们知道整个函数的最值必然在零点处

那么取所有零点计算取最小值就可以了

\(O(n^2)\)

其实并不需要那么高的复杂度

我们先将零点从大到小排序

然后换一个零点时,它后面的式子小于零,前面的式子大于零,用它的增量就可以 \(O(1)\) 计算了

注意:\(a_i\) 可能为零!需特别处理

\(Code\)

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std; const int N = 3e5 + 5;
int n , m;
struct node{
double a , b;
}c[N + 5];
double val , ans , k1 , k2; bool cmp(node x , node y){return x.b < y.b;} int main()
{
freopen("spongebob.in" , "r" , stdin);
freopen("spongebob.out" , "w" , stdout);
scanf("%d" , &n);
for(register int i = 1; i <= n; i++)
{
++m;
scanf("%lf%lf" , &c[m].a , &c[m].b);
if (c[m].a == 0) {val += abs(c[m].b); --m; continue;}
c[m].b = -c[m].b / c[m].a , c[m].a = fabs(c[m].a);
}
sort(c + 1 , c + m + 1 , cmp);
for(register int i = 2; i <= m; i++) val += (c[i].b - c[1].b) * c[i].a , k1 += c[i].a;
k2 = c[1].a , ans = val;
for(register int i = 2; i <= m; i++)
{
val -= k1 * (c[i].b - c[i - 1].b);
val += k2 * (c[i].b - c[i - 1].b);
k1 -= c[i].a , k2 += c[i].a;
ans = min(ans , val);
}
printf("%lf\n" , ans);
}

JZOJ 6800.NOIP2020.9.19模拟spongebob的更多相关文章

  1. [jzoj 5178] [NOIP2017提高组模拟6.28] So many prefix? 解题报告(KMP+DP)

    题目链接: https://jzoj.net/senior/#main/show/5178 题目: 题解: 我们定义$f[pos]$表示以位置pos为后缀的字符串对答案的贡献,答案就是$\sum_{i ...

  2. [jzoj 5177] [NOIP2017提高组模拟6.28] TRAVEL 解题报告 (二分)

    题目链接: https://jzoj.net/senior/#main/show/5177 题目: 题解: 首先选出的泡泡怪一定是连续的一段 L,R 然后 L 一定属于虫洞左边界中的某一个 R 也同样 ...

  3. 2019中山纪念中学夏令营-Day9[JZOJ](第六次模拟赛)

    Begin (题目的排序方式:Unkown其实是按心情排的) 异或:(摘自百度百科) 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”,计算机符号为“xor”.其运算法则为: ...

  4. JZOJ 3453.【NOIP2013中秋节模拟】连通块(connect)

    3453.[NOIP2013中秋节模拟]连通块(connect) Time Limits: 1000 ms Memory Limits: 262144 KB (File IO): input:conn ...

  5. [JZOJ 5852] [NOIP2018提高组模拟9.6] 相交 解题报告 (倍增+LCA)

    题目链接: http://172.16.0.132/senior/#main/show/5852 题目: 题目大意: 多组询问,每次询问树上两条链是否相交 题解: 两条链相交并且仅当某一条链的两个端点 ...

  6. [JZOJ 5875] [NOIP2018提高组模拟9.20] 听我说,海蜗牛 解题报告(BFS+二分)

    题目链接: http://172.16.0.132/senior/#main/show/5875 题目: 题解: 注意这题只能经过开放的港口 我们考虑用vector存下每个点不能到的点,并把并让vec ...

  7. 【JZOJ 5048】【GDOI2017模拟一试4.11】IQ测试

    题目大意: 判断一个序列是否是另外一个序列删除若干个数字之后得到的. 正文: 我们可以定义两个指针,分别指向长序列和短序列. 拿样例来举例: 如果指针指的数相同,两个指针都往右跳: 如果不同,则指向长 ...

  8. 通过ipv6访问 g o o g l e

    Google.Youtube.Facebook等均支持IPv6访问,IPv4网络的用户大部分都无法访问,比如Gmail,Google Docs等等各种相关服务.而该类网站大部分均已接入IPv6网络,因 ...

  9. linux 系统管理 使用技巧

    一.这篇文章讲了什么? 这篇文章很有参考性哈.本来是想等一段时间有更多条技巧后在发布的,不过,突然发现,我是去年的今天在博客园落户了,祝我的博客一周岁快乐,希望以后多分享一些文章啦.所以就把草稿箱的其 ...

  10. NET4.5之初识async与await

    这是两个关键字,用于异步编程.我们传统的异步编程方式一般是Thread.ThreadPool.BeginXXX.EndXXX等等.把调用.回调分开来,代码的逻辑是有跳跃的,于是会导致思路不是很清晰的问 ...

随机推荐

  1. 【SQL查询】必会的常用函数:条件函数、日期函数、文本函数、窗口函数

    〇.概述 1.内容 选择(双分支.多分支) 一.条件函数 1.计算25岁以上和以下的用户数量 CASE THEN END多分支选择 SELECT (CASE WHEN age>=25 THEN ...

  2. 《MySQL必知必会》之快速入门存储过程

    使用存储过程 本章介绍什么是存储过程,为什么使用.如何使用,并介绍如何创建和使用存储过程的基本语法 存储过程 在实际应用中,往往需要执行多个表的多条sql语句 存储过程就是为以后的使用而保存的一条或者 ...

  3. STM32用寄存器实现电平翻转(一个按键控制LED灯的开关)

    代码 GPIOx -> ODR ^= GPIO_Pin_x 如果加载了标准库的文件: GPIOx中的x可以为(A,B,C,D--) GPIO_Pin_x中的x可以为(1,2,3--) 如果没有加 ...

  4. python运算符与基本数据类型

    Python种类 JavaPython cPython ***** pypy 字节码 和 机器码 Python程序: 1. 终端: C:\python35\python.exe D:\1.py 解释器 ...

  5. CTFshow——funnyrsa2

    题目如下: 题目分析: 发现n很小,可以考虑yafu分解n,或者使用在线网站,例如:http://factordb.com/.即得p,q,r.因为常规rsa只有p和q,则phi = (p -1) * ...

  6. java中json字符串与实体类对象相互转换

    1.问题描述 有一个需求是这样的,把实体类转为Json字符串存入redis中,然后再把redis中存放的实体类Json字符串插入数据库中.因此需要涉及到json字符串与实体类对象的相互转换. 2.产生 ...

  7. [常用工具] 基于psutil和GPUtil获取系统状态信息

    本文主要介绍在Python3中利用psutil库获取系统状态,利用GPUtil获取gpu状态. psutil (process and system utilities)(进程和系统实用程序)是一个跨 ...

  8. Vue双向绑定原理梳理

    简介 vue数据双向绑定主要是指:数据变化更新视图,视图变化更新数据. 实现方式:数据劫持 结合 发布者-订阅者 模式. 数据劫持通过 Object.defineProperty()方法. 对对象的劫 ...

  9. S2-017 CVE-2013-2248

    漏洞名称 Apache Struts 多个开放重定向漏洞 (CVE-2013-2248) s2-017 利用条件 Struts 2.0.0 - Struts 2.3.15 漏洞原理 通过操作前缀为&q ...

  10. 使用IDEA搭建SSM项目

    使用IDEA搭建SSM项目   摘要:前几天学习了SSM项目的搭建,但是因为配置过程中出现了问题因此没有搭起来,我最讨厌不确定的事情,因此自己花费了点时间钻研搭建SSM项目的方法,终于习得了SSM项目 ...