- #include <iostream> 
- #include <vector> 
- #include <time.h> 
- using namespace std; 
-   
- enum TIME_TABLE_TYPE { 
-     TT_LESSON,TT_SMALL_BREAK,TT_LONG_BREAK 
- }; 
-   
- struct tm add_time(struct tm time1, struct tm time2); 
- void print_time(struct tm timeinfo); 
-   
- int main() { 
- 	struct tm lesson_start; 
- 	struct tm lesson_length; 
- 	struct tm small_break; 
- 	struct tm long_break; 
-   
- 	// Init default values 
- 	lesson_start.tm_hour = 8; 
- 	lesson_start.tm_min = 45; 
-   
- 	lesson_length.tm_hour = 0; 
- 	lesson_length.tm_min = 45; 
-   
- 	small_break.tm_hour = 0; 
- 	small_break.tm_min = 30; 
-   
- 	long_break.tm_hour = 0; 
- 	long_break.tm_min = 45; 
-   
- 	// Init time_table 
- 	vector <int> time_table = {TT_LESSON,TT_SMALL_BREAK,TT_LESSON,TT_SMALL_BREAK,TT_LESSON,TT_SMALL_BREAK,TT_LESSON, 
- 	TT_LONG_BREAK,TT_LESSON}; 
-   
- 	struct tm timeinfo = lesson_start; 
-   
- 	for(vector<int>::iterator i = time_table.begin(); i != time_table.end(); i++) { 
-     	if (*i == TT_LESSON) { 
-     		print_time(timeinfo); 
-     		timeinfo = add_time(timeinfo,lesson_length); 
-     		print_time(timeinfo); 
-     	} else if (*i == TT_SMALL_BREAK) { 
-     		timeinfo = add_time(timeinfo,small_break); 
-     	} else if (*i == TT_LONG_BREAK) { 
-     		timeinfo = add_time(timeinfo,long_break); 
-     	} 
-     } 
-   
- 	return 0; 
- } 
-   
- void print_time(struct tm timeinfo) { 
- 	cout << timeinfo.tm_hour << " : " << timeinfo.tm_min <<  endl; 
- } 
-   
- struct tm add_time(struct tm time1, struct tm time2) { 
- 	time1.tm_hour +=time2.tm_hour; 
- 	time1.tm_min += time2.tm_min; 
- 	if (time1.tm_min >= 60) { 
- 		time1.tm_hour = time1.tm_hour + 1; 
- 		time1.tm_min -= 60; 
- 	} 
-   
- 	return time1; 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dGltZS5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSBUSU1FX1RBQkxFX1RZUEUgewogICAgVFRfTEVTU09OLFRUX1NNQUxMX0JSRUFLLFRUX0xPTkdfQlJFQUsKfTsKCnN0cnVjdCB0bSBhZGRfdGltZShzdHJ1Y3QgdG0gdGltZTEsIHN0cnVjdCB0bSB0aW1lMik7CnZvaWQgcHJpbnRfdGltZShzdHJ1Y3QgdG0gdGltZWluZm8pOwoKaW50IG1haW4oKSB7CglzdHJ1Y3QgdG0gbGVzc29uX3N0YXJ0OwoJc3RydWN0IHRtIGxlc3Nvbl9sZW5ndGg7CglzdHJ1Y3QgdG0gc21hbGxfYnJlYWs7CglzdHJ1Y3QgdG0gbG9uZ19icmVhazsKCQoJLy8gSW5pdCBkZWZhdWx0IHZhbHVlcwoJbGVzc29uX3N0YXJ0LnRtX2hvdXIgPSA4OwoJbGVzc29uX3N0YXJ0LnRtX21pbiA9IDQ1OwoJCglsZXNzb25fbGVuZ3RoLnRtX2hvdXIgPSAwOwoJbGVzc29uX2xlbmd0aC50bV9taW4gPSA0NTsKCQoJc21hbGxfYnJlYWsudG1faG91ciA9IDA7CglzbWFsbF9icmVhay50bV9taW4gPSAzMDsKCQoJbG9uZ19icmVhay50bV9ob3VyID0gMDsKCWxvbmdfYnJlYWsudG1fbWluID0gNDU7CgkKCS8vIEluaXQgdGltZV90YWJsZQoJdmVjdG9yIDxpbnQ+IHRpbWVfdGFibGUgPSB7VFRfTEVTU09OLFRUX1NNQUxMX0JSRUFLLFRUX0xFU1NPTixUVF9TTUFMTF9CUkVBSyxUVF9MRVNTT04sVFRfU01BTExfQlJFQUssVFRfTEVTU09OLAoJVFRfTE9OR19CUkVBSyxUVF9MRVNTT059OwoJCglzdHJ1Y3QgdG0gdGltZWluZm8gPSBsZXNzb25fc3RhcnQ7CgkKCWZvcih2ZWN0b3I8aW50Pjo6aXRlcmF0b3IgaSA9IHRpbWVfdGFibGUuYmVnaW4oKTsgaSAhPSB0aW1lX3RhYmxlLmVuZCgpOyBpKyspIHsKICAgIAlpZiAoKmkgPT0gVFRfTEVTU09OKSB7CiAgICAJCXByaW50X3RpbWUodGltZWluZm8pOwogICAgCQl0aW1laW5mbyA9IGFkZF90aW1lKHRpbWVpbmZvLGxlc3Nvbl9sZW5ndGgpOwogICAgCQlwcmludF90aW1lKHRpbWVpbmZvKTsKICAgIAl9IGVsc2UgaWYgKCppID09IFRUX1NNQUxMX0JSRUFLKSB7CiAgICAJCXRpbWVpbmZvID0gYWRkX3RpbWUodGltZWluZm8sc21hbGxfYnJlYWspOwogICAgCX0gZWxzZSBpZiAoKmkgPT0gVFRfTE9OR19CUkVBSykgewogICAgCQl0aW1laW5mbyA9IGFkZF90aW1lKHRpbWVpbmZvLGxvbmdfYnJlYWspOwogICAgCX0KICAgIH0KCglyZXR1cm4gMDsKfQoKdm9pZCBwcmludF90aW1lKHN0cnVjdCB0bSB0aW1laW5mbykgewoJY291dCA8PCB0aW1laW5mby50bV9ob3VyIDw8ICIgOiAiIDw8IHRpbWVpbmZvLnRtX21pbiA8PCAgZW5kbDsKfQoKc3RydWN0IHRtIGFkZF90aW1lKHN0cnVjdCB0bSB0aW1lMSwgc3RydWN0IHRtIHRpbWUyKSB7Cgl0aW1lMS50bV9ob3VyICs9dGltZTIudG1faG91cjsKCXRpbWUxLnRtX21pbiArPSB0aW1lMi50bV9taW47CglpZiAodGltZTEudG1fbWluID49IDYwKSB7CgkJdGltZTEudG1faG91ciA9IHRpbWUxLnRtX2hvdXIgKyAxOwoJCXRpbWUxLnRtX21pbiAtPSA2MDsKCX0KCQoJcmV0dXJuIHRpbWUxOwp9Cg==