(File IO): input:reuntion.in output:reuntion.out
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
題目描述
畢業20年以後,我們的主人公開始準備同學聚會。打了無數電話後他終於搞到了所有同學的地址。他們有些人仍在本市,但大多數人分散在其他的城市。不過,他發現一個巧合,所有地址都恰好分散在一條鐵路線上。他準備發出邀請但無法決定應該在哪個地方舉行宴會。最後他決定選擇一個地點,使大家旅行的總花費最小。我們的主人公既不擅長數學,也不擅長計算機。他請你這個NOIP的高手幫忙寫一個程序,根據他同學的地址,選擇聚會的最佳地點。
輸入
輸入文件的每一行描述了一個城市的信息。(不超過個城市),首先是城裏同學的個數(保證總人數在範圍內),緊跟着是這個城市到(起始點)的距離(),最後是城市的名稱。最後一行描述的總是,它在鐵路線的一端,距離爲,三個數據之間分別用空格隔開。
輸出
輸出聚會地點城市名稱和旅程費用(單程),兩者之間用一個空格隔開。每花費元人民幣。總距離保證在範圍內。
樣例輸入
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);
}