zoukankan      html  css  js  c++  java
  • 2019/10/22 test T1 题解

    题目描述

    给定n个a[i],b[i],求min(x$in$R){$sumlimits_{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

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 #define int long long
     7 #define maxn 300000+10
     8 #define INF 2147483647
     9 using namespace std;
    10 inline int read() 
    11 {
    12     int x=0;
    13     bool f=1;
    14     char c=getchar();
    15     for(; !isdigit(c); c=getchar()) if(c=='-') f=0;
    16     for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+c-'0';
    17     if(f) return x;
    18     return 0-x;
    19 }
    20 inline void write(int x)
    21 {
    22     if(x<0){putchar('-');x=-x;}
    23     if(x>9)write(x/10);
    24     putchar(x%10+'0');
    25 }
    26 int n;
    27 struct node
    28 {
    29     double a,b,val;
    30 }x[maxn];
    31 double minn=INF;
    32 inline bool cmp(node x,node y)
    33 {
    34     return x.val<y.val;
    35 }
    36 inline double cal(double num)
    37 {
    38     double ans=0;
    39     for(int i=1;i<=n;i++)
    40     {
    41         ans+=abs(x[i].a*num+x[i].b);
    42     }
    43     return ans;
    44 }
    45 signed main()
    46 {
    47     n=read();
    48     for(int i=1;i<=n;i++) 
    49     {
    50         scanf("%lf%lf",&x[i].a,&x[i].b);
    51         if(x[i].a==0) continue;
    52         int re=x[i].b*-1;
    53         x[i].val=double(re)/double(x[i].a);
    54     }
    55     if(n==1) 
    56     {
    57         write(0);
    58         return 0;
    59     }
    60     sort(x+1,x+n+1,cmp);
    61     double l=x[1].val,r=x[n].val;
    62     while(r-l>=1e-8)
    63     {
    64         double m1=l+(r-l)/3,m2=r-(r-l)/3;
    65         if(cal(m1)<cal(m2)) r=m2;
    66         else l=m1;
    67     }
    68     printf("%.8f",cal(l));
    69     return 0;
    70 }
  • 相关阅读:
    python 利用正则表达的式提取特定数据如手机号
    python 横向比较最大值 贴标签
    Go语言基础之17--Redis基本操作
    Mysql5.7.20源码编译安装
    Go语言基础之16--Mysql基本操作
    Go语言学习包(1)之bufio包
    Go语言基础之15--文件基本操作
    Go语言基础练习题系列5
    Go语言基础之14--Waitgroup和原子操作
    Go语言基础之13--线程安全及互斥锁和读写锁
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/11722150.html
Copyright © 2011-2022 走看看