zoukankan      html  css  js  c++  java
  • 街道最短问题201308061059.txt

    街区最短路径问题
    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
    描述
    一个街区有很多住户,街区的街道只能为东西、南北两种方向。

    住户只可以沿着街道行走。

    各个街道之间的间隔相等。

    用(x,y)来表示住户坐在的街区。

    例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。

    现在要建一个邮局,使得各个住户到邮局的距离之和最少。

    求现在这个邮局应该建在那个地方使得所有住户距离之和最小;


    输入
    第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
    每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数0<x,y<100,表示某个用户所在街区的坐标。
    m行后是新一组的数据;

    输出
    每组数据输出到邮局最小的距离和,回车结束;
    样例输入
    2
    3
    1 1
    2 1
    1 2
    5
    2 9
    5 20
    11 9
    1 1
    1 20
    样例输出
    2
    44

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    //int x[110],y[110],c[110],d[110];//放在这里也是可以的
    int cmp(const void*a,const void*b)
    {
     return *(int *)a-*(int *)b;
    }
    int main()
    {
     int x[110],y[110],c[110],d[110];
     int n,sum,i,m;
     scanf("%d",&n);
        while(n--)
        {
         sum=0;
         scanf("%d",&m);
         for(i=0;i<m;i++)
         {
          scanf("%d%d",&x[i],&y[i]);
          c[i]=x[i];
          d[i]=y[i];
         }
         qsort(c,m,sizeof(c[0]),cmp);
         qsort(d,m,sizeof(d[0]),cmp);
         for(i=0;i<m;i++)
         sum=sum+abs(c[m/2]-x[i])+abs(d[m/2]-y[i]);//如果m是奇数的话直接取m/2,这很明了的,但是如果是偶数的话,m/2与(m/2)+1是等
           printf("%d ",sum);                          //效的在题中,所以这一点就不必纠结了!
        }
        return 0;
    }
          
          

  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/xiaziteng/p/jiedao.html
Copyright © 2011-2022 走看看