编程之美2015资格赛 A.2月29日
来源:互联网 发布:mac是哪个国家的品牌 编辑:程序博客网 时间:2024/05/01 15:03
我也不知道为什么我这一题最后写了三百多行代码==
首先处理边界的两个年份,分别判断是否包含2月29日,注意如果第一个日期和第二个日期在同一年,则要避免将同一年的2月29日计算了两次,也要注意两个日期同年但第二个日期在2月29日之前的case。
接下来处理中间的日期即可。开始我以为闰年是每隔四年一次== 后来才发现是“四年一闰,百年不闰,四百年又闰”。所以先计算中间日期%4==0的年数(不需要排除%400!=0的case)n1,再计算中间日期%100==0的年数n2,再计算再计算中间日期%400==0的年数n3,最后的答案是n1-n2+n3。
#include<iostream>#include<stdio.h>#include<cstdio>#include<stdlib.h>#include<vector>#include<string>#include<cstring>#include<cmath>#include<algorithm>#include<stack>#include<queue>#include<ctype.h>#include<map>#include<time.h>#include<bitset>#include<set>#include<list>using namespace std;//BOP quali Pro1int T;long long ans;class node{public: int mon; int day; long long year; bool ifleap;public: node() { mon=0; day=0; year=0; ifleap=false; } node(int d,int m,long long y,bool flg) { day=d; mon=m; year=y; ifleap=flg; }};node data[2];bool judge(long long year){ if(year%4==0&&year%100!=0) { return true; } else if(year%400==0) { return true; } return false;}int convertmonth(char str[]){ int ret=0; if(strcmp(str,"January")==0) { ret=1; } if(strcmp(str,"February")==0) { ret=2; } if(strcmp(str,"March")==0) { ret=3; } if(strcmp(str,"April")==0) { ret=4; } if(strcmp(str,"May")==0) { ret=5; } if(strcmp(str,"June")==0) { ret=6; } if(strcmp(str,"July")==0) { ret=7; } if(strcmp(str,"August")==0) { ret=8; } if(strcmp(str,"September")==0) { ret=9; } if(strcmp(str,"October")==0) { ret=10; } if(strcmp(str,"November")==0) { ret=11; } if(strcmp(str,"December")==0) { ret=12; } return ret;}bool aft(node nd){ if(nd.mon>2) { return true; } else if(nd.mon==2&&nd.day>=29) { return true; } return false;}bool bef(node nd){ if(nd.mon<2) { return true; } else if(nd.mon==2&&nd.day<=29) { return true; } return false;}void solve(){ if(data[0].ifleap==true) { if(data[0].mon<2) { if(data[1].year==data[0].year) { if(aft(data[1])) { ans++; } } else { ans++; } } else if(data[0].mon==2&&data[0].day<=29) { if(data[1].year==data[0].year) { if(aft(data[1])) { ans++; } } else { ans++; } } } //cout<<"1: "<<ans<<endl; if(data[1].ifleap==true) { if(data[1].mon>2) { if(data[1].year!=data[0].year) { ans++; } } else if(data[1].mon==2&&data[1].day>=29) { if(data[1].year!=data[0].year) { ans++; } } } //cout<<"2: "<<ans<<endl; long long left=0; long long right=0; long long ye=data[0].year+1; //cout<<"ye: "<<ye<<endl; for(int i=0;i<400;i++) { //if(judge(ye)==true) if(ye%4==0) { left=ye; //cout<<"l: "<<ye<<endl; break; } ye++; //cout<<ye<<"jug: "<<judge(ye)<<endl; } ye=data[1].year-1; for(int i=0;i<400;i++) { //if(judge(ye)==true) if(ye%4==0) { //cout<<"r: "<<ye<<endl; right=ye; break; } ye--; } if(left<=right) { ans+=(right-left)/4+1; } //cout<<"3: "<<ans<<" "<<left<<" "<<right<<endl; left=(long long)(data[0].year/100+1)*100; if(data[1].year%100==0) { right=(long long)(data[1].year/100-1)*100; } else { right=(long long)(data[1].year/100)*100; } if(left>right) return; ans-=(right-left)/100+1; //cout<<"4: "<<ans<<" "<<left<<" "<<right<<endl; for(int i=0;i<4;i++) { if(judge(left)==true) { break; } left+=100; } for(int i=0;i<4;i++) { if(judge(right)==true) { break; } right-=100; } if(left<=right) { ans+=(right-left)/400+1; } //cout<<"5: "<<ans<<" "<<left<<" "<<right<<endl;}bool solvesmall(){ if(data[0].ifleap==true) { if(data[0].mon<2) { // cout<<aft(data[1])<<endl; if(data[1].year==data[0].year) { if(aft(data[1])) { ans++; } } else { ans++; } } else if(data[0].mon==2&&data[0].day<=29) { if(data[1].year==data[0].year) { if(aft(data[1])) { ans++; } } else { ans++; } } } //cout<<"1: "<<ans<<endl; if(data[1].ifleap==true) { if(data[1].mon>2) { if(data[1].year!=data[0].year) { ans++; } } else if(data[1].mon==2&&data[1].day>=29) { if(data[1].year!=data[0].year) { ans++; } } // cout<<data[1].mon<<" "<<data[1].day<<endl; } //cout<<"2: "<<ans<<endl; int left=data[0].year+1; int right=data[1].year-1; for(int i=left;i<=right;i++) { if(judge(i)) { ans++; } }}int main(){ //freopen("input.txt","r",stdin); //freopen("D-small-practice.in","r",stdin); //freopen("out1.txt","w",stdout); scanf("%d",&T); for(int ca=1;ca<=T;ca++) { char s[20]; int d; long long y; ans=0; scanf("%s %d,%lld",&s,&d,&y); data[0]=node(d,convertmonth(s),y,false); if(judge(y)) { data[0].ifleap=true; } scanf("%s %d,%lld",&s,&d,&y); data[1]=node(d,convertmonth(s),y,false); if(judge(y)) { data[1].ifleap=true; } solve(); printf("Case #%d: %lld\n",ca,ans); // ans=0; // solvesmall(); //printf("Case #%d: %d\n",ca,ans); } return 0;}
0 0
- 2015编程之美资格赛 A 2月29日
- 编程之美2015资格赛 A 2月29日
- 编程之美2015资格赛 A.2月29日
- 2015编程之美资格赛:2月29日
- 2015编程之美资格赛-2月29日
- 编程之美资格赛-2月29日
- 编程之美2015资格赛--题目1 : 2月29日
- 编程之美2015资格赛 - 题目1 : 2月29日
- 2015编程之美资格赛:2月29日 模拟题
- hiho 编程之美2015资格赛(2月29日-模拟日期)
- 编程之美2015资格赛 题目1 : 2月29日
- 2015编程之美资格赛题目1 : 2月29日
- 编程之美2015资格赛 题目1 : 2月29日
- 2015编程之美资格赛A
- `2015 编程之美 资格赛 第一题 hihocoder 区间闰年 2月29 数量 模拟题
- 2015 编程之美 2月29日
- 编程之美2015资格赛#2
- 编程之美2015资格赛
- IText实现Html转PDF itextpdf-5.5.5.jar
- debain(wheezy) 安装增强功能提示无权限解决方法
- js内置对象Array练习
- HTTP协议?HTTP协议中POST、GET、HEAD的区别是什么?
- 华为在线测试题[基础篇]--字符串排序
- 编程之美2015资格赛 A.2月29日
- IOS各种调试技巧豪华套餐
- TLV5618芯片驱动程序
- 出了雷军周鸿祎,湖北却消失在中国互联网版图
- NaviCat远程连接MySql
- Zend Framework2 - 设置提交表单时的错误信息样式
- tomcat6 eclipse java.lang.OutOfMemoryError: PermGen space
- Structs2入门篇(环境搭建及Demo)
- iOS 系统导航栏 UINavigationController 标题设置setTitleTextAttributes