(紀中)1440. reuntion

(File IO): input:reuntion.in output:reuntion.out
時間限制: 1000 ms 空間限制: 262144 KB 具體限制


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


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

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


樣例輸入
7 9289 Vladivostok
5 8523 chabarovsk
3 5184 Irkutsk
8 2213 Yalutorovsk
10 0 Moscow

樣例輸出
Yalutorovsk 112125


數據範圍限制


解題思路
找到聚會地點然後模擬就好。。。


代碼

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<map>
using namespace std;
long long n,maxn,mid,i,j,t,ans;
struct c
{
	long long x,y;
	string s;
}a[100010];
bool cmp(const c&l,const c&r)
{
	return l.y<r.y;
}
int main() {
	freopen("reuntion.in","r",stdin);
	freopen("reuntion.out","w",stdout);
	n=1;
	while(scanf("%lld %lld",&a[n].x,&a[n].y)) {
		cin>>a[n].s;
		maxn+=a[n].x;
		if(a[n].s=="Moscow")
			break;
		else
		n++;
	}
	sort(a+1,a+n+1,cmp);
	mid=(maxn+1)/2;
	t=0;
	for(i=1; i<=n; i++) {
		if(t+a[i].x>mid)
			break;
		else
			t=t+a[i].x;
	}
	cout<<a[i].s<<" ";
	ans=0;
	for(j=1; j<=n; j++)
	{
		ans+=abs((a[j].y-a[i].y))*a[j].x;
	} 
	printf("%d",ans);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章