Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define CONTESTANTS_COUNT 3
- #define MAX_CONTESTANT_HITS 5
- #define SECONDS_IN_MINUTE 60
- #define SECONDS_PENALTY 30
- #define STARTING_CONTESTANT_LETTER 'A'
- using namespace std;
- class Time {
- public:
- unsigned long long minutes;
- int seconds;
- Time(unsigned long long minutes, int seconds)
- : minutes(minutes), seconds(seconds) {}
- void addSeconds(int value) {
- seconds += value;
- while(seconds >= SECONDS_IN_MINUTE) {
- seconds -= SECONDS_IN_MINUTE;
- minutes++;
- }
- }
- int to_seconds() const {
- return seconds + minutes * SECONDS_IN_MINUTE;
- }
- bool operator<(const Time& time) const {
- return this->to_seconds() < time.to_seconds();
- }
- string to_string() {
- return minutes + " " + seconds;
- }
- };
- class Contestant {
- public:
- int id;
- Time time;
- int hits;
- bool normalized;
- Contestant(int id, unsigned long long minutes, int seconds, int hits)
- : id(id), time(minutes, seconds), hits(hits), normalized(false) {}
- static Contestant* readFromCin(int id) {
- unsigned long long m;
- int s, i;
- cin >> m >> s >> i;
- return new Contestant(id, m, s, i);
- }
- void normalize() {
- if(normalized)
- return;
- for(int i = hits; i < MAX_CONTESTANT_HITS; i++) {
- hits++;
- time.addSeconds(SECONDS_PENALTY);
- }
- }
- char get_letter() {
- return STARTING_CONTESTANT_LETTER + id;
- }
- };
- Contestant* get_winner(Contestant* contestants[CONTESTANTS_COUNT]) {
- Contestant* winner = contestants[0];
- winner->normalize();
- for(int i = 1; i < CONTESTANTS_COUNT; i++) {
- contestants[i]->normalize();
- if(contestants[i]->time < winner->time) {
- winner = contestants[i];
- }
- }
- return winner;
- }
- int main() {
- Contestant* contestants[CONTESTANTS_COUNT];
- for(int i = 0; i < CONTESTANTS_COUNT; i++) {
- contestants[i] = Contestant::readFromCin(i);
- }
- Contestant* winner = get_winner(contestants);
- cout << winner->time.minutes << " " << winner->time.seconds << " "
- << winner->get_letter() << endl;
- for(int i = 0; i < CONTESTANTS_COUNT; i++) {
- delete contestants[i];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment