zoukankan      html  css  js  c++  java
  • 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);
    }
    }
  • 相关阅读:
    jquery实现奇偶行赋值不同css值
    Android短信批量插入速度优化的思考与尝试
    Android短信列表的时间显示
    短信优先级及有效期
    模拟器收短信和接电话的方法
    Android:Perferences的使用
    留个脚印
    Android电池电量更新 BatteryService(转)
    Android号码匹配位数修改
    CDMA SMS pdu解码
  • 原文地址:https://www.cnblogs.com/SSYYGAM/p/4215500.html
Copyright © 2011-2022 走看看