• 厦门大学 ACM 1465 连续数列 三分


    http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1465

    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    double arr[112345];
    int N;
    inline double Abs( double x ){ return x>0?x:-x;}
    inline double Min( double a,double b ){return a>b?b:a;}
    
    double work( double ans )
    {
        double res = 0;
        for( int i = 1; i <= N; i++ )
            res += Abs( arr[i] - ans  );
        return res;
    }
    int main( )
    {
        while( scanf("%d",&N) != EOF )
        {
            for( int i = 1; i <= N; i++ )
                scanf("%lf",&arr[i]);
            sort( &arr[1],&arr[1]+N );
            for( int i = 1; i <= N; i++ )
            arr[i] -= (i-1);
            sort( &arr[1],&arr[1]+N );
            double lt = arr[1],rt = arr[N];
            while( rt - lt >= 3  )
            {
                double ans1 = (rt+lt+lt)/3.;
                double ans2 = (rt+rt+lt)/3.;
                double res1 = work(ans1);
                double res2 = work(ans2);
                if( res1 < res2 ) rt = ans2;
                else              lt = ans1;
            }
            lt = int (lt-1); rt = int( rt+1 );
            double res = work(lt*1.);
            for( int i = lt; i <= rt; i++ )
                res = Min( res,work(i*1.) );
            printf("%.lf\n",res);
        }
        return 0;
    }
    

     另一种方法

    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    long long arr[112345];
    int main( )
    {
        long long N;
        while( scanf("%lld",&N) != EOF )
        {
            for( long long i = 1; i <= N; i++ )
            scanf("%lld",&arr[i]);
            sort( &arr[1],&arr[1]+N );
            for( long long i = 1; i <= N; i++ )
            arr[i] -= (i-1);
            sort( &arr[1],&arr[1]+N );
            if( N%2 )
            {
                long long tab = N/2+1,res = 0;
                for( long long i = 1; i <= N; i++ )
                   res += abs( arr[i] - arr[tab] );
                printf("%lld\n",res);
            }
            else
            {
                long long tab1 = N/2;
                long long tab2 = N/2+1;
                long long res = 0,ans = 0;
                for( long long i = 1; i <= N; i++ )
                   ans += abs( arr[i] - arr[tab1] );
                for( long long i = 1; i <= N; i++ )
                   res += abs( arr[i] - arr[tab2] );
                printf("%lld\n",min( res,ans ) );
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    win7最新版下载与密钥 | Win7用户福音:微软集成更新的新版Windows 7镜像泄露
    迅捷PDF编辑器 v2.1.0.1 中文免费版
    解决移动网络无法访问胡萝卜周网站(www.carrotchou.blog)
    vue启动流程
    vue--综合组件间的通信
    网络请求
    vue环境搭建
    vue--路由嵌套
    vue路由高级用法
    vue-router实现组件间的跳转---参数传递
  • 原文地址:https://www.cnblogs.com/wulangzhou/p/3077745.html
Copyright © 2020-2023  润新知