HDU 2083 간이 판 의 최 단 거리

간이 판 의 최 단 거리
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15057    Accepted Submission(s): 6648
Problem Description
겨울방학 에 ACBOY 는 많은 친 구 를 찾 아 가 려 고 하 는데 공교롭게도 그의 모든 친구 의 집 은 좌표 평면 X 축 에 있다.ACBOY 는 친구 의 집 을 선택 하여 방문 을 시작 할 수 있 지만 방문 할 때마다 출발점 으로 돌아 가 야 다음 친 구 를 방문 할 수 있 습 니 다.
예 를 들 어 네 명의 친구 가 있 는데 해당 하 는 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
 

中文题目,很容易看懂的;直接暴力就可以求出来了;
我们可以把起点设置在每个位置,然后走一遍,将其需要花费的时间加起来,然后保存到一个数组中,最后对该数组进行一个升序排序,数组的第一个位置肯定就是其花费最少时间的情况了;


需要注意的是,我们这里用到了绝对值函数 abs();该函数在头文件 #include中;其实不知道的也可以直接自己写一个绝对值函数;


直接给出AC代码:
#include
#include
#include
#include
using namespace std;
int main()
{
	int m, n;
	int friends[505], mini[505];
	cin >> m;
	while (m--)
	{
		cin >> n;
		memset(mini, 0, sizeof(mini));
		for (int i = 0; i < n; i++)
			cin >> friends[i];
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				mini[i] += abs(friends[j] - friends[i]);
			}
		}
		sort(mini, mini + n);
		cout << mini[0] << endl;
	}
	return 0;
}

좋은 웹페이지 즐겨찾기