科林明伦杯 - B Time
来源:互联网 发布:xps分析软件下载 编辑:程序博客网 时间:2024/05/01 14:42
Problem B. Time
Time Limit: 1000ms Memory Limit: 100000k
Description
Kim是一个掌控时间的大师。不同于一般人,他习惯使用秒来计算时间。如果你问他现在是几点,他会告诉你现在是今天的xxxx秒。Mik想要考考Kim。他想知道从某一天的00:00:00开始,经过s秒后是哪一天。但是Mik不会计算答案,他需要你的帮助。
注意:我们认为一天从00:00:00开始,到23:59:59结束。00:00:00经过1秒后是00:00:01;从00:00:00开始,加86400(60*60*24)秒后就是下一天的00:00:00.
Input
第一行一个整数T表示数据组数。
接下来T行,每行一个日期yyyy-MM-dd,接下来一个整数s表示s秒。
Output
对于每个输入,输出一行yyyy-MM-dd 表示答案。对于不足两位的数要补齐前导0。
Sample
Input
Output
3
2016-12-10 1000
2016-02-28 86400
2016-01-01 1000000
2016-12-10
2016-02-29
2016-01-12
Hint
T<=100
s<=2147483647
日期在1800-01-01到2100-01-01之间
闰年的判断:
1.能被4整除且不能被100整除的为闰年.
2.能被400整除的是闰年.
这道题很简单的水题,可惜我做不对···找了很长时间的BUG 也没找出来
测试了很多数据 也都正确 ,求大神指出错误
WA代码
#include<stdio.h>int a[13]= {31,28,31,30,31,30,31,31,30,31,30,31};int jude(int a){ if(a%100!=0&&a%4==0||a%400==0) return 1; else return 0;}int main(){ int t; scanf("%d",&t); while(t--) { int y,m,d,s; scanf("%d-%d-%d",&y,&m,&d); scanf("%d",&s); int day0=0,day; day=s/86400; //printf("%d\n",day); if(jude(y)==1) { a[1]=29; } for(int i=0;i<m-1;i++) { day0+=a[i]; } day0+=d; day+=day0; //printf("%d\n",day); int yd=365; while(day>yd) { yd=365; if(jude(y)==1) yd=366; if(day>yd) { y++; day-=yd; //printf("%d %d\n",y,jude(y)); } } int i=0,month=0; //printf("%d\n",day); a[1]=28; if(jude(y)==1) { a[1]=29; } //printf("%d**\n",a[1]); while(day>a[i]) { day-=a[i]; //printf("%d\n",day); i++; } if(y<10) printf("0%d-",y); if(y>=10) printf("%d-",y); if(i+1<10) printf("0%d-",i+1); if(i+1>=10) printf("%d-",i+1); if(day<10) { printf("0%d\n",day); } if(day>=10) { printf("%d\n",day); } } return 0;}
下面直接再上一AC的 大神代码
%#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <iostream>#define FOR(i,j,k) for(int i=j;i<=k;i++)using namespace std;bool isleap(int y){ if ((y%4==0 && y%100!=0) || y%400==0)return true; return false;}int maxday(int y,int m){ if (m==2) { if (isleap(y))return 29; else return 28; } else { if (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)return 31; else return 30; }}int main (int argc, char *argv[]){ int noc; int y,m,d; int s; scanf("%d",&noc); while (noc--) { scanf("%d-%d-%d%d",&y,&m,&d,&s); int ad=s/86400.0; FOR(_,1,ad) { d++; if (d>maxday(y,m)) { d=1; m++; } if (m==13) { m=1; y++; } } printf("%d-%.2d-%.2d\n",y,m,d); } return 0;}
直接暴力搞简洁明了
当时怕超时 就把时间复杂度优化了一下
结果优化的 代码复杂了,也找不出BUG了
0 0
- 科林明伦杯 - B Time
- Hrbust 2315 Time ("科林明伦杯"哈理工第六届团队赛)
- "科林明伦杯"哈尔滨理工大学第六届程序设计团队赛 HRBUST 2315 Time(水)
- "科林明伦杯"哈尔滨理工大学第六届程序设计团队赛
- "科林明伦杯"哈尔滨理工大学第六届程序设计团队赛(12.10)
- "科林明伦杯"哈尔滨理工大学第六届程序设计团队赛总结
- "科林明伦杯"哈尔滨理工大学第六届程序设计团队赛(流水账)
- "科林明伦杯"哈尔滨理工大学第六届程序设计团队赛总结
- 科林明伦杯哈尔滨理工大学第七届程序设计团队赛-水题*2
- 科林明伦杯哈尔滨理工大学第七届程序设计团队赛-Aggie’s Tasks
- “科林明伦杯”哈尔滨理工大学第七届程序设计团队赛 G.Sorting(贪心,思路)
- 科林明伦杯”哈尔滨理工大学第七届程序设计团队赛G
- “科林明伦杯”哈尔滨理工大学第七届程序设计团队赛 A. An Easy Geometry Problem(计算几何)
- “科林明伦杯”哈尔滨理工大学第七届程序设计团队赛 I.Aggie’s Tasks(带权的LIS)
- “科林明伦杯”哈尔滨理工大学第七届程序设计团队赛 I.Aggie’s Tasks(带权的LIS)
- a^b time limit
- B. The Time
- B - Simple Game Time
- 基于MFC单文档下调用opencv库并将图片效果显示在单文档窗口
- 浅谈~ 算法的艺术
- bzoj 3674 (可持久化线段树+并查集按秩合并)
- Java上传下载完全解析(一)
- 知识库--DistributedManager 集群 (50)
- 科林明伦杯 - B Time
- Mysql-聚簇索排序慢案例分析
- c::关于虚函数的一点补充
- 网络编程(36)—— 线程安全函数和非线程安全函数
- PHP与UTF-8的最佳实践
- 你只管努力,剩下的交给时光---一个南方姑娘的2016北漂之旅
- C语言实践-结构体
- 浏览器禁用cookie后,非共享使用session
- NYOJ927 The partial sum problem(深搜DFS)