• 1076: 最短距离


    题目描述

    在河边有N户人家,他们每天都需要到河边去打水,后来政府拔款给大家修建一个水库。
    每户人家到水库的最短距离为沿河方向的距离差,问如何选择水库的位置,使所有人到水库的距离和最短?

    输入

    第一行输入一个数字Case,表示一共有多少组测试数据。
    接下来Case个测试数据块。
    每个测试数据块:第一行一个数字N,表示有N户人。
    接下来一行有N个数字d,表示每户人家在河流方向上的坐标。
    Case<=10,1<=N<=100000,0<=d<=2*10^9。

    输出

    对于每组测试数据,输出最短的距离和,一行一个结果。

    样例输入

    2
    2
    1 3
    1
    3
    

    样例输出

    2
    0
    

    提示

    来源

    #include<stdio.h>
    #include<string.h>
    sortquickly(int a[],int lenth)
    {
        int mid;
        mid = a[0];
        int i,j;
        i=0;
        j=lenth-1;
        if(lenth>1)
        {
            while(i<j)
            {
                for(;j>i;j--)
                {
                    if(a[j]<mid)
                    {
                        a[i++]=a[j];
                        break;
                    }
                }
                for(;i<j;i++)
                {
                    if(a[i]>mid)
                    {
                        a[j--]=a[i];
                        break;
                    }
                }
            }
            a[i]=mid;
            sortquickly(a,i);
            sortquickly(a+i+1,lenth-i-1);
        }
    }
    main()
    {
        int i,a[100001],lenth,N,h,p,o,mid,x,T,j;
        long sum;
        scanf("%d",&T);
        for(j=0;j<T;j++)
        {
        sum=0;
        scanf("%d",&N);
        h=N;
        for(i=0;i<N;i++)
        scanf("%d",&a[i]);
        sortquickly(a,N);
            if(h%2!=0)
        {      
            p=(h-1)/2;
            mid=a[p];
            for(o=0;o<p;o++)
            {
            x=mid-a[o];
            sum=sum+x;
            }
            for(o=p+1;o<h;o++)
            {
            x=a[o]-mid;
            sum=sum+x;
            }
        }
            if(h%2==0)
        {
            p=h/2;
            p=p-1;
            mid=a[p];
            for(o=0;o<p;o++)
            {
            x=mid-a[o];
            sum=sum+x;
            }
            for(o=p+1;o<h;o++)
            {
            x=a[o]-mid;
            sum=sum+x;
            }
        }
            printf("%ld ",sum);
    }
    }
  • 相关阅读:
    原笔迹手写实现平滑和笔锋效果之:笔迹的平滑(二)
    区块链入门(4)Truffle创建项目,编译,及项目部署
    github的基本使用
    ES6新特性之傻瓜式说明
    webpack之傻瓜式教程及前端自动化入门
    查找树莓派ip地址的常用方法
    树莓派的无屏幕安装的教程
    采用QHD分辨率使用kinect2_calibration,完成QHD图像校正
    编译ORBSLAM2 build_ros.sh,实现kinect2在ROS环境下运行ORBSLAM2
    重写kinect2_viewer,编译高博kinect2在orbslam2上跑的程序(解决cmakefile中库依赖和头文件的问题)
  • 原文地址:https://www.cnblogs.com/SSYYGAM/p/4215500.html
Copyright © 2020-2023  润新知