[C] 2013腾讯马拉松初赛 ACM 小Q系列故事——世界上最遥远的距离 →→→→→进入此内容的聊天室

来自 , 2020-04-10, 写在 C, 查看 102 次.
URL http://www.code666.cn/view/99f59c08
  1. /*
  2.  
  3. 2013腾讯马拉松初赛第3场
  4.  
  5. 1001 小Q系列故事——世界上最遥远的距离
  6.  
  7. Time Limit: 0.2 Seconds   Memory Limit: 65536K
  8.  
  9.  
  10. 世界上最遥远的距离
  11. 不是生与死
  12. 而是我就站在你面前
  13. 你却不知道我爱你
  14.  
  15. 世界上最遥远的距离
  16. 不是我就站在你面前你却不知道我爱你
  17. 而是明明知道彼此相爱
  18. 却不能在一起
  19.  
  20. 世界上最遥远的距离
  21. 不是明明知道彼此相爱却不能在一起
  22. 而是相约好了私奔的时间
  23. 我穿越到了未来 你却回去了古代
  24.  
  25. ——摘自《小Q失恋日记 》第117卷513页
  26.  
  27. 当小Q使出浑身解数,终于赢得HR女神芳心的时候,却出现了一个意外情况,那就是白富美HR的妈妈并不同意他们交往,当听说小Q只是一个码农,特别是听说小Q曾经参加过资本主义国家发起的SM/ICPC比赛的时候,更是坚决反对!
  28. 爱情是伟大的,但是得不到亲人祝福的爱情却备受折磨,小Q和HR相约在腾讯第二届编程马拉松大赛进行到第5天的时候(即2013年3月24日),一起“向前穿越D天,然后开启幸福新生活”。
  29. 其勇气可谓令人赞叹,但可怜的小Q却总是备受折磨——小Q理解的”向前穿越”是朝着未来的方向,而女友HR理解的“向前穿越”却是朝着古代的方向!
  30. 假设已知现在的日期和穿越的天数D,你能计算出小Q和女友各自到达的年代吗?
  31.  
  32. Input
  33.  
  34.   输入首先包含一个整数N,表示有N组测试用例;
  35.   接下来N行是N组数据,每一行包含一个正整数D(D<=10,0000),D表示向前穿越的天数。
  36.  
  37. Output
  38.  
  39.   请计算并输出小Q和女友分别到达的日期,日期格式为YYYY/MM/DD,两个日期中间用一个空格隔开,每组数据占一行,具体输出格式请参见样例。
  40.  
  41. Sample Input
  42.  
  43. 2
  44. 6
  45. 30
  46.  
  47. Sample Output
  48.  
  49. 2013/03/30 2013/03/18
  50. 2013/04/23 2013/02/22
  51.  
  52.  
  53. */
  54.  
  55. /*
  56. 解题报告:
  57.  
  58. 直接按照天数来一天一天加上去,然后模拟进位即可。
  59. 对于减法就模拟退位。
  60. */
  61.  
  62.  
  63. #include<stdio.h>
  64. #include<string.h>
  65. const int MAX = 2100;
  66. typedef __int64 lld;
  67. const lld INF = (lld)(1000000000) * (lld)(100);
  68. int mon[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  69. bool leap(int n) {
  70.     return (n % 4 == 0 && n % 100 != 0) || n % 400 == 0;
  71. }
  72. void outnext(int n) {
  73.     int y = 2013;
  74.     int m = 3;
  75.     int d = 23;
  76.     while(n--) {
  77.         d++;
  78.         mon[2] = 28 + leap(y);
  79.         if(d > mon[m]) {
  80.             d = 1;
  81.             m++;
  82.             if(m > 12) {
  83.                 y++;
  84.                 m = 1;
  85.             }
  86.         }
  87.  
  88.     }
  89.     printf("%04d/%02d/%02d", y, m, d);
  90. }
  91. void outpre(int n) {
  92.     int y = 2013;
  93.     int m = 3;
  94.     int d = 23;
  95.     while(n--) {
  96.         d--;
  97.         mon[2] = 28 + leap(y);
  98.         if(d == 0) {
  99.             m--;
  100.             if(m < 1) {
  101.                 m = 12;
  102.                 y--;
  103.             }
  104.             d = mon[m];
  105.         }
  106.     }
  107.     printf("%04d/%02d/%02d", y, m, d);
  108. }
  109. int main() {
  110.     int n, i, j;
  111.     int m;
  112.     int x, y;
  113.     int T, k;
  114.  
  115.     scanf("%d", &T);
  116.     while(T--) {
  117.         scanf("%d", &n);
  118.         outnext(n + 1);
  119.         putchar(' ');
  120.         outpre(n - 1);
  121.         puts("");
  122.     }
  123.     return 0;
  124. }

回复 "2013腾讯马拉松初赛 ACM 小Q系列故事——世界上最遥远的距离"

这儿你可以回复上面这条便签

captcha