Ranking (as of 2014-08-04): 121 out of 656
Language: C++
/*
UVa 538 - Balancing Bank Accounts
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_538_Balancing_Bank_Accounts.cpp
*/
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
struct traveller {
string name_;
int account_;
bool operator<(const traveller& t) const {return account_ < t.account_;}
};
int main()
{
for (int cn = 1; ; cn++) {
int n, t;
cin >> n >> t;
if (!n && !t)
break;
map<string, int> names;
vector<traveller> travellers(n);
for (int i = 0; i < n; i++) {
string s;
cin >> s;
travellers[i].name_ = s; travellers[i].account_ = 0;
names[s] = i;
}
while (t--) {
string s, t;
int a;
cin >> s >> t >> a;
travellers[names[s]].account_ -= a;
travellers[names[t]].account_ += a;
}
sort(travellers.begin(), travellers.end());
cout << "Case #" << cn << endl;
for (int i = 0, j = n - 1; i < j && travellers[i].account_; ) {
int d = travellers[i].account_ + travellers[j].account_;
cout << travellers[j].name_ << ' ' <<
travellers[i].name_ << ' ';
if (d > 0) {
cout << -travellers[i].account_ << endl;
i++;
travellers[j].account_ = d;
}
else if (d < 0) {
cout << travellers[j].account_ << endl;
travellers[i].account_ = d;
j--;
}
else {
cout << travellers[j].account_ << endl;
i++; j--;
}
}
cout << endl;
}
return 0;
}
No comments:
Post a Comment