2019/10/22 test T1 题解
2024-08-22 09:58:14
题目描述
给定n个a[i],b[i],求min(x$\in$R){$\sum\limits_{i=1}^{n}$|a[i]*x+b[i]|}
输入格式
第 1行 1个整数 n
第 2行 n个整数,第 i个为 a[i],b[i]
输入格式
输出一行一个实数 y,表示答案。你可以输出任意位小数,随后系统会将你的输出与答案进行比较,只
有当你的输出与答案绝对误差不超过 $10^{-3}$ 时才能得到该测试点的分数
输入样例
2
1 1
2 -1
输出样例
1.50000000000
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define int long long
#define maxn 300000+10
#define INF 2147483647
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int n;
struct node
{
double a,b,val;
}x[maxn];
double minn=INF;
inline bool cmp(node x,node y)
{
return x.val<y.val;
}
inline double cal(double num)
{
double ans=;
for(int i=;i<=n;i++)
{
ans+=abs(x[i].a*num+x[i].b);
}
return ans;
}
signed main()
{
n=read();
for(int i=;i<=n;i++)
{
scanf("%lf%lf",&x[i].a,&x[i].b);
if(x[i].a==) continue;
int re=x[i].b*-;
x[i].val=double(re)/double(x[i].a);
}
if(n==)
{
write();
return ;
}
sort(x+,x+n+,cmp);
double l=x[].val,r=x[n].val;
while(r-l>=1e-)
{
double m1=l+(r-l)/,m2=r-(r-l)/;
if(cal(m1)<cal(m2)) r=m2;
else l=m1;
}
printf("%.8f",cal(l));
return ;
}
最新文章
- centos7.0 下安装git(ssh方式)
- ANT_HOME is set incorrectly or ant could not be located .Please set ANT_HOME.
- C++移位运算符
- 移动开发框架,Hammer.js&;nbsp;移动设备触摸手势js库
- .Net 三款工作流引擎比较:WWF、netBPM 和 ccflow
- 可视化数据包分析工具-CapAnalysis
- [转自已]Windos多个文件快速重命名说明+图解
- 【uwp】浅谈China Daily中数据同步到One Drive的实现
- Python3 解释器
- Scheme r5rs letrec的用法
- ajax跨域请求,亲测有效
- Python【每日一问】13
- thinkphp5 or
- AXURE插件在 Chrome 浏览器中用不了怎么办?
- 【luogu4320】道路相遇 (圆方树 + LCA)
- LRU ,LRUW,CKPT-Q
- Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
- kubernetes中使用NFS创建pv_pvc
- resize2fs: Bad magic number in super-block while trying to open
- html5图像、图片处理【转】