#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
class Time
{
int hour;
int minute;
void allFromMinutes()
{
hour = minute / 60;
minute %= 60;
}
public:
Time() : hour(0), minute(0)
{}
Time(int hour, int minute) : hour(hour), minute(minute)
{}
Time(Time const& adolf) : Time(adolf.getHour(), adolf.getMinute())
{}
void addMinutes(int minutes)
{
minute += minutes;
while (minute >= 60)
{
minute -= 60;
hour++;
}
}
void addHour(int hour)
{
this->hour += hour;
while (this->hour > 24)
{
this->hour -= 24;
}
}
void removeMinutes(int minutes)
{
while (minutes > 0)
{
minute -= minutes;
if (minute < 0)
{
hour--;
minutes = (-minute) - 1;
minute = 59;
}
else
{
minutes -= minutes;
}
}
}
void removeHour(int hour)
{
this->hour -= hour;
if (this->hour < 0)
{
this->hour += 24;
}
}
void setHour(int hour) { this->hour = hour; }
void setMinute(int minute) { this->minute = minute; }
int allToMinutes() const
{
return minute + hour * 60;
}
int getHour() const { return hour; }
int getMinute() const {
return minute;
}
friend ostream& operator<<(ostream& out, Time const& a);
Time& operator=(Time const& a)
{
setHour(a.getHour());
setMinute(a.getMinute());
return *this;
}
friend bool operator==(Time const& a, Time const& b)
{
return (a.getHour() == b.getHour() && a.getMinute() == b.getMinute());
}
Time operator-(Time const& a) const
{
Time temp(*this);
Time res(0, 0);
while (temp.getHour() != a.getHour())
{
temp.addHour(1);
res.addHour(1);
}
if (temp.getMinute() > a.getMinute())
{
res.removeHour(1);
res.setMinute(60 - (temp.getMinute() - a.getMinute()));
}
else if (temp.getMinute() < a.getMinute())
{
res.setMinute((a.getMinute() - temp.getMinute()));
}
return res;
}
};
ostream& operator<<(ostream& out, Time const& a)
{
if (a.getHour() < 10) { out << 0; }
out << a.getHour() << ':';
if (a.getMinute() < 10) { out << 0; }
out << a.getMinute();
return out;
}
int main() {
Time a(23, 30);
Time b(1, 30);
Time c(a);
c = a - b;
cout << c << endl;
system("pause");
return 0;
}
I2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBUaW1lCnsKICAgIGludCBob3VyOwogICAgaW50IG1pbnV0ZTsKCiAgICB2b2lkIGFsbEZyb21NaW51dGVzKCkKICAgIHsKICAgICAgICBob3VyID0gbWludXRlIC8gNjA7CiAgICAgICAgbWludXRlICU9IDYwOwogICAgfQpwdWJsaWM6CgogICAgVGltZSgpIDogaG91cigwKSwgbWludXRlKDApCiAgICB7fQogICAgVGltZShpbnQgaG91ciwgaW50IG1pbnV0ZSkgOiBob3VyKGhvdXIpLCBtaW51dGUobWludXRlKQogICAge30KICAgIFRpbWUoVGltZSBjb25zdCYgYWRvbGYpIDogVGltZShhZG9sZi5nZXRIb3VyKCksIGFkb2xmLmdldE1pbnV0ZSgpKQogICAge30KCiAgICB2b2lkIGFkZE1pbnV0ZXMoaW50IG1pbnV0ZXMpCiAgICB7CiAgICAgICAgbWludXRlICs9IG1pbnV0ZXM7CiAgICAgICAgd2hpbGUgKG1pbnV0ZSA+PSA2MCkKICAgICAgICB7CiAgICAgICAgICAgIG1pbnV0ZSAtPSA2MDsKICAgICAgICAgICAgaG91cisrOwogICAgICAgIH0KICAgIH0KICAgIHZvaWQgYWRkSG91cihpbnQgaG91cikKICAgIHsKICAgICAgICB0aGlzLT5ob3VyICs9IGhvdXI7CiAgICAgICAgd2hpbGUgKHRoaXMtPmhvdXIgPiAyNCkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPmhvdXIgLT0gMjQ7CiAgICAgICAgfQogICAgfQogICAgdm9pZCByZW1vdmVNaW51dGVzKGludCBtaW51dGVzKQogICAgewogICAgICAgIHdoaWxlIChtaW51dGVzID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIG1pbnV0ZSAtPSBtaW51dGVzOwogICAgICAgICAgICBpZiAobWludXRlIDwgMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaG91ci0tOwogICAgICAgICAgICAgICAgbWludXRlcyA9ICgtbWludXRlKSAtIDE7CiAgICAgICAgICAgICAgICBtaW51dGUgPSA1OTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1pbnV0ZXMgLT0gbWludXRlczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHZvaWQgcmVtb3ZlSG91cihpbnQgaG91cikKICAgIHsKICAgICAgICB0aGlzLT5ob3VyIC09IGhvdXI7CiAgICAgICAgaWYgKHRoaXMtPmhvdXIgPCAwKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+aG91ciArPSAyNDsKICAgICAgICB9CiAgICB9CiAgICB2b2lkIHNldEhvdXIoaW50IGhvdXIpIHsgdGhpcy0+aG91ciA9IGhvdXI7IH0KICAgIHZvaWQgc2V0TWludXRlKGludCBtaW51dGUpIHsgdGhpcy0+bWludXRlID0gbWludXRlOyB9CgogICAgaW50IGFsbFRvTWludXRlcygpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIG1pbnV0ZSArIGhvdXIgKiA2MDsKICAgIH0KCiAgICBpbnQgZ2V0SG91cigpIGNvbnN0IHsgcmV0dXJuIGhvdXI7IH0KICAgIGludCBnZXRNaW51dGUoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIG1pbnV0ZTsKICAgIH0KCiAgICBmcmllbmQgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvdXQsIFRpbWUgY29uc3QmIGEpOwogICAgVGltZSYgb3BlcmF0b3I9KFRpbWUgY29uc3QmIGEpCiAgICB7CiAgICAgICAgc2V0SG91cihhLmdldEhvdXIoKSk7CiAgICAgICAgc2V0TWludXRlKGEuZ2V0TWludXRlKCkpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oVGltZSBjb25zdCYgYSwgVGltZSBjb25zdCYgYikKICAgIHsKICAgICAgICByZXR1cm4gKGEuZ2V0SG91cigpID09IGIuZ2V0SG91cigpICYmIGEuZ2V0TWludXRlKCkgPT0gYi5nZXRNaW51dGUoKSk7CiAgICB9CiAgICBUaW1lIG9wZXJhdG9yLShUaW1lIGNvbnN0JiBhKSBjb25zdAogICAgewogICAgICAgIFRpbWUgdGVtcCgqdGhpcyk7CiAgICAgICAgVGltZSByZXMoMCwgMCk7CiAgICAgICAgd2hpbGUgKHRlbXAuZ2V0SG91cigpICE9IGEuZ2V0SG91cigpKQogICAgICAgIHsKICAgICAgICAgICAgdGVtcC5hZGRIb3VyKDEpOwogICAgICAgICAgICByZXMuYWRkSG91cigxKTsKICAgICAgICB9CgogICAgICAgIGlmICh0ZW1wLmdldE1pbnV0ZSgpID4gYS5nZXRNaW51dGUoKSkKICAgICAgICB7CiAgICAgICAgICAgIHJlcy5yZW1vdmVIb3VyKDEpOwogICAgICAgICAgICByZXMuc2V0TWludXRlKDYwIC0gKHRlbXAuZ2V0TWludXRlKCkgLSBhLmdldE1pbnV0ZSgpKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRlbXAuZ2V0TWludXRlKCkgPCBhLmdldE1pbnV0ZSgpKQogICAgICAgIHsKICAgICAgICAgICAgcmVzLnNldE1pbnV0ZSgoYS5nZXRNaW51dGUoKSAtIHRlbXAuZ2V0TWludXRlKCkpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXM7CiAgICB9Cn07Cgpvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwgVGltZSBjb25zdCYgYSkKewogICAgaWYgKGEuZ2V0SG91cigpIDwgMTApIHsgb3V0IDw8IDA7IH0KICAgIG91dCA8PCBhLmdldEhvdXIoKSA8PCAnOic7CiAgICBpZiAoYS5nZXRNaW51dGUoKSA8IDEwKSB7IG91dCA8PCAwOyB9CiAgICBvdXQgPDwgYS5nZXRNaW51dGUoKTsKCiAgICByZXR1cm4gb3V0Owp9CgppbnQgbWFpbigpIHsKCiAgICBUaW1lIGEoMjMsIDMwKTsKICAgIFRpbWUgYigxLCAzMCk7CgogICAgVGltZSBjKGEpOwogICAgYyA9IGEgLSBiOwogICAgY291dCA8PCBjIDw8IGVuZGw7CgogICAgc3lzdGVtKCJwYXVzZSIpOwogICAgcmV0dXJuIDA7Cn0K