codeforces 304B. Calendar (日期相减)
来源:互联网 发布:天敏网络机顶盒设置 编辑:程序博客网 时间:2024/05/15 23:48
http://codeforces.com/problemset/problem/304/B
大致题意:给出两个日期,求出它们之间相差的天数。
自己用C++写的挺长(主要是瑞年的干扰)。。。
#include <iostream>#include <cstdio>using namespace std;bool leap[3000];int month[15];int main(){ //freopen("cin.txt","r",stdin); for(int i=1900;i<=2038;i++){ if(i%400==0||(i%4==0&&i%100!=0)) leap[i]=1; } for(int i=1;i<=7;i+=2){ month[i]=31; } month[2]=28; month[4]=month[6]=30; month[9]=month[11]=30; for(int i=8;i<=12;i+=2) month[i]=31; int y1,m1,d1,y2,m2,d2; while(~scanf("%d:%d:%d",&y1,&m1,&d1)){ scanf("%d:%d:%d",&y2,&m2,&d2); bool change=0; if(y1>y2) change=1; if(y1==y2&&m1>m2) change=1; if(y1==y2&&m1==m2&&d1>d2) change=1; if(change){ y1=y1^y2; y2=y1^y2; y1=y1^y2; m1=m1^m2; m2=m1^m2; m1=m1^m2; d1=d1^d2; d2=d1^d2; d1=d1^d2; } int ans=0; if(y1==y2&&m1==m2){ //同年同月 ans=d2-d1; printf("%d\n",ans); continue; } if(y1==y2){ //同年 for(int i=m1+1;i<m2;i++){ ans+=month[i]; } if(m1==2){ //开始 if(leap[y1]){ ans+=29-d1; } else ans+=28-d1; } else if(m1==1){ if(leap[y1]&&m2>2)ans++; ans+=31-d1; } else ans+=month[m1]-d1; ans+=d2; //结束 printf("%d\n",ans); continue; } for(int i=y1+1;i<y2;i++){ //中间 ans+=365; if(leap[i]) ans++; } if(m1<=2) { //第一年 if(m1==1){ if(leap[y1]) ans+=29; else ans+=28; ans+=(31-d1); for(int i=3;i<=12;i++) ans+=month[i]; } else { if(leap[y1]) ans+=(29-d1); else ans+=(28-d1); for(int i=3;i<=12;i++) ans+=month[i]; } } else { ans+=(month[m1]-d1); for(int i=m1+1;i<=12;i++) ans+=month[i]; } if(m2>2){ ans+=31; if(leap[y2])ans+=29; else ans+=28; for(int i=3;i<=m2-1;i++) ans+=month[i]; ans+=d2-1; } else if(m2==2){ ans+=31; ans+=(d2-1); } else { ans+=d2-1; } ans++; printf("%d\n",ans); } return 0;}
本想用java写的,提交后神奇的事情发生了,自己本地的运行结果和测评机的结果居然不一样。
我java 1.7.0和java 1.8.0都选过,结果提交后第二个例子的结果就不一样,我滴神。。。
代码:
import java.text.*;import java.util.*;public class Main { public static void main(String[] args) { DateFormat df=new SimpleDateFormat("yyyy:MM:dd"); Date d1=new Date(); Date d2=new Date(); String s1,s2; Scanner cin=new Scanner(System.in); while(cin.hasNext()) { s1 = cin.next(); s2 = cin.next(); try { d1 = df.parse(s1); d2 = df.parse(s2); if (d1.compareTo(d2) > 0) { Date t = new Date(); t = d1; d1 = d2; d2 = t; } } catch(Exception e){ } long diff = d2.getTime() - d1.getTime();//差值是微秒级别 long days = diff / (1000 * 60 * 60 * 24); System.out.println(days); } }}
0 0
- codeforces 304B. Calendar (日期相减)
- codeforces 304 B. Calendar
- CF 304B(Calendar-一段时间的日期)
- java Calendar日期相减问题
- Codeforces Round #183 (Div. 2) B. Calendar
- Calendar 日期
- Codeforces Round #183 (Div. 2) B. Calendar 天数差
- Problem G B. Calendar Codeforces Round #183 (Div. 2)
- codeforces Calendar
- B. Calendar
- Calendar自定义日期控件
- Java日期-calendar使用方法
- calendar类,日期加减
- 常用日期操作Calendar
- Calendar 获取日期
- 多线程,日期calendar
- Java 日期加减法 calendar
- Calendar 日期工具
- 矩阵、向量求导法则
- WordPress 全方位优化指南(上)
- 一万小时定律的思考
- Android开发总结笔记 Btimap (上) 3-4
- 一个小例子分清sizeof(s)和strlrn(s)的区别
- codeforces 304B. Calendar (日期相减)
- Nosql之redis学习(四)
- 获取文件的绝对路径
- Spring scope属性
- JAVA 使用Dom4j 解析XML
- Chrome解析JSON工具
- 方向导数和梯度
- Java设计模式_行为型_中介者模式_租个房子不过如此
- java项目中引用loadrunner lrapi