1440. reuntion

1440. reuntion

題目描述

畢業20年以後,我們的主人公開始準備同學聚會。打了無數電話後他終於搞到了所有同學的地址。他們有些人仍在本市,但大多數人分散在其他的城市。不過,他發現一個巧合,所有地址都恰好分散在一條鐵路線上。他準備發出邀請但無法決定應該在哪個地方舉行宴會。最後他決定選擇一個地點,使大家旅行的總花費最小。我們的主人公既不擅長數學,也不擅長計算機。他請你這個NOIP的高手幫忙寫一個程序,根據他同學的地址,選擇聚會的最佳地點。

輸入

輸入文件的每一行描述了一個城市的信息。(不超過10000個城市),首先是城裏同學的個數(保證總人數在2^32範圍內),緊跟着是這個城市到Moscow(起始點)的距離(km),最後是城市的名稱。最後一行描述的總是Moscow,它在鐵路線的一端,距離爲0,三個數據之間分別用空格隔開。

輸出

輸出聚會地點城市名稱和旅程費用(單程),兩者之間用一個空格隔開。每km花費1元人民幣。總距離保證在2^64範圍內。

樣例輸入

7 9289 Vladivostok
5 8523 chabarovsk
3 5184 Irkutsk
8 2213 Yalutorovsk
10 0 Moscow

樣例輸出

Yalutorovsk 112125

思路:
暴力每一個點做聚會地點,然後距離加總(因爲費用1元每公里)。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
long long p[10010],jl[10010],tot=1,minn=MAX,minp;
string name[10010];
void input()
{
	scanf("%lld%lld",&p[tot],&jl[tot]);
	cin>>name[tot];
	while(name[tot]!="Moscow")
	{
		tot++;
		scanf("%lld%lld",&p[tot],&jl[tot]);
		cin>>name[tot];
	}
}
int main()
{
	fre(reuntion);
	input();
	for(int i=1;i<=tot;i++)
	{
		long long sum=0;
		for(int j=1;j<=tot;j++) sum+=abs(jl[i]-jl[j])*p[j];
		if(sum<minn) minn=sum,minp=i;
	}
	cout<<name[minp]<<' '<<minn<<endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章