/* 2013腾讯马拉松初赛第3场 1001 小Q系列故事——世界上最遥远的距离 Time Limit: 0.2 Seconds Memory Limit: 65536K 世界上最遥远的距离 不是生与死 而是我就站在你面前 你却不知道我爱你 世界上最遥远的距离 不是我就站在你面前你却不知道我爱你 而是明明知道彼此相爱 却不能在一起 世界上最遥远的距离 不是明明知道彼此相爱却不能在一起 而是相约好了私奔的时间 我穿越到了未来 你却回去了古代 ——摘自《小Q失恋日记 》第117卷513页 当小Q使出浑身解数,终于赢得HR女神芳心的时候,却出现了一个意外情况,那就是白富美HR的妈妈并不同意他们交往,当听说小Q只是一个码农,特别是听说小Q曾经参加过资本主义国家发起的SM/ICPC比赛的时候,更是坚决反对! 爱情是伟大的,但是得不到亲人祝福的爱情却备受折磨,小Q和HR相约在腾讯第二届编程马拉松大赛进行到第5天的时候(即2013年3月24日),一起“向前穿越D天,然后开启幸福新生活”。 其勇气可谓令人赞叹,但可怜的小Q却总是备受折磨——小Q理解的”向前穿越”是朝着未来的方向,而女友HR理解的“向前穿越”却是朝着古代的方向! 假设已知现在的日期和穿越的天数D,你能计算出小Q和女友各自到达的年代吗? Input   输入首先包含一个整数N,表示有N组测试用例;   接下来N行是N组数据,每一行包含一个正整数D(D<=10,0000),D表示向前穿越的天数。 Output   请计算并输出小Q和女友分别到达的日期,日期格式为YYYY/MM/DD,两个日期中间用一个空格隔开,每组数据占一行,具体输出格式请参见样例。 Sample Input 2 6 30 Sample Output 2013/03/30 2013/03/18 2013/04/23 2013/02/22 */ /* 解题报告: 直接按照天数来一天一天加上去,然后模拟进位即可。 对于减法就模拟退位。 */ #include #include const int MAX = 2100; typedef __int64 lld; const lld INF = (lld)(1000000000) * (lld)(100); int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool leap(int n) { return (n % 4 == 0 && n % 100 != 0) || n % 400 == 0; } void outnext(int n) { int y = 2013; int m = 3; int d = 23; while(n--) { d++; mon[2] = 28 + leap(y); if(d > mon[m]) { d = 1; m++; if(m > 12) { y++; m = 1; } } } printf("%04d/%02d/%02d", y, m, d); } void outpre(int n) { int y = 2013; int m = 3; int d = 23; while(n--) { d--; mon[2] = 28 + leap(y); if(d == 0) { m--; if(m < 1) { m = 12; y--; } d = mon[m]; } } printf("%04d/%02d/%02d", y, m, d); } int main() { int n, i, j; int m; int x, y; int T, k; scanf("%d", &T); while(T--) { scanf("%d", &n); outnext(n + 1); putchar(' '); outpre(n - 1); puts(""); } return 0; }