杭电2083(简易版之最短距离)

简易版之最短距离

Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 2   Accepted Submission(s) : 2

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

寒假的时候,ACBOY要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上。ACBOY可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点,然后才能去访问下一个朋友。
比如有4个朋友,对应的X轴坐标分别为1,
2, 3, 4。当ACBOY选择坐标为2的点做为出发点时,则他最终需要的时间为 |1-2|+|2-2|+|3-2|+|4-2| =
4。
现在给出N个朋友的坐标,那么ACBOY应该怎么走才会花费时间最少呢?

Input

输入首先是一个正整数M,表示M个测试实例。每个实例的输入有2行,首先是一个正整数N(N <=
500),表示有N个朋友,下一行是N个正整数,表示具体的坐标(所有数据均<=10000).

Output

对于每一个测试实例,请输出访问完所有朋友所花的最少时间,每个实例的输出占一行。

Sample Input

2
2
2 4
3
2 4 6

Sample Output

2
4

//据观察,发现:想要时间最短,只需取排序后的数组元素的中间值为<开始访问>求解比较;//不判断n的奇偶真的对吗?暂时不知;;

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4
 5 int zhengzhi(int a,int b)
 6 {
 7     if(a-b<0)
 8     return b-a;
 9     else
10     return a-b;
11 }
12
13 int main()
14 {
15     int m;
16     scanf("%d",&m);
17     while(m--)
18     {
19         int n,i,sum=0,sum1=0,num[500];
20         scanf("%d",&n);
21         for(i=0;i<n;i++)
22         scanf("%d",&num[i]);
23         sort(num,num+n);
24         if(n%2==1)  //判断语句;
25         {
26             for(i=0;i<n;i++)
27             sum+=zhengzhi(num[i],num[(n-1)/2]);
28         }
29         else
30         {
31             for(i=0;i<n;i++)
32             {
33                 sum1+=zhengzhi(num[i],num[n/2]);
34                 sum+=zhengzhi(num[i],num[n/2-1]);
35             }
36             if(sum1>sum)
37             sum=sum1;
38         }
39         printf("%d\n",sum);
40     }
41     return 0;
42 } 

//水水更健康;

时间: 2024-12-25 13:02:08

杭电2083(简易版之最短距离)的相关文章

杭电 2083 简易版之最短距离

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2083 解题思路:看到数据不大,直接算出每一种不同起点对应的距离找出最小值就可以了 反思:其实最开始看到题目,想的是,将这一组数按升序排列好,然后中间的那几个点就很有可能是距离小的点,后来想到点与点的距离也不是均衡的,所以不能这样做 #include<stdio.h> #include<math.h> #include<stdlib.h> int main() { int n

HDU 2083 简易版之最短距离 --- 水题

HDU 2083 简易版之最短距离 /* HDU 2083 简易版之最短距离 */ #include <cstdio> #include <algorithm> using namespace std; const int maxn = 505; int a[maxn]; int main() { #ifdef _LOCAL freopen("D:\\input.txt", "r", stdin); #endif int t; scanf(&

hdoj 2083 简易版之最短距离

简易版之最短距离 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13510    Accepted Submission(s): 6000 Problem Description 寒假的时候,ACBOY要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上.ACBOY可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点

hdu - 2083 - 简易版之最短距离

找到中位数 , 根据对称性 , 当中位数需要两个数取中值的时候不需要取 , 只需要其中的任意一个数几个 例如四个数 1 , 2 , 3 , 4 . 这四个数 , 其中的 2 和 3 都可以 . 然后求 该点到所有点的 题目要求 解之和 就OK了 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm>

简易版之最短距离

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13709    Accepted Submission(s): 6083 Problem Description 寒假的时候,ACBOY要去拜訪非常多朋友,恰巧他全部朋友的家都处在坐标平面的X轴上.ACBOY能够随意选择一个朋友的家開始訪问.可是每次訪问后他都必须回到出发点,然后才干去訪

杭电2025指针版

#include<stdio.h>int main(){ char a[103]; while(scanf("%s",a)!=EOF) { char *p=a,ch=*p; while(*(++p)) if(*p>ch) ch=*p; p=a; while(*p) { if(*p==ch) printf("%c(max)",*p); else printf("%c",*p); p++; } putchar('\n'); } re

hdu2083 简易版之最短距离

点A和点B之间任意一点到A的距离+到B的距离=|AB|,而AB外的一点到A的距离+到B的距离>|AB|: #include<math.h> #include<stdio.h> #include<stdlib.h> #include<string.h> int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main(void) { int t,n; int x[5

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI