#include <iomanip>
#include <iostream>
#include <string>
using namespace std;
#define ull unsigned long long
enum EventType {
FUEL_CONSUMPTION, LEAK, GAS_STATION, MECHANIC, GOAL
};
EventType getEventType(const string& event_name) {
switch (event_name[0]) {
case 'F':
return FUEL_CONSUMPTION;
case 'L':
return LEAK;
case 'M':
return MECHANIC;
default:
if (event_name[1] == 'a')
return GAS_STATION;
return GOAL;
}
}
int main() {
ull fuel_consumption = 0, leaks = 0, previous_kilometers = 0;
double tank_capacity_needed = 0, gas_used = 0;
bool end = false;
while (!end) {
ull kilometers;
cin >> kilometers;
string event_name;
cin >> event_name;
EventType event = getEventType(event_name);
if (event == FUEL_CONSUMPTION || event == GAS_STATION)
cin >> event_name;
// add gas used
ull driven = kilometers - previous_kilometers;
previous_kilometers = kilometers;
gas_used += leaks * driven;
gas_used += (fuel_consumption / 100.0) * driven;
// update state of car
switch (event) {
case FUEL_CONSUMPTION:
cin >> fuel_consumption;
if (fuel_consumption == 0)
end = true;
break;
case LEAK:
leaks++;
break;
case MECHANIC:
leaks = 0;
break;
case GAS_STATION:
if (gas_used > tank_capacity_needed)
tank_capacity_needed = gas_used;
gas_used = 0;
break;
case GOAL:
if (gas_used > tank_capacity_needed)
tank_capacity_needed = gas_used;
gas_used = 0;
cout << std::fixed << setprecision(3) << tank_capacity_needed << endl;
tank_capacity_needed = 0;
leaks = 0;
previous_kilometers = 0;
break;
}
}
return 0;
}
Friday, April 24, 2015
UVa 11935 - Through the Desert
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment