| 记录编号 | 
        469945 | 
        评测结果 | 
        AAAAAAAAAA | 
    
    
        | 题目名称 | 
        2563.[NOIP 2016PJ]回文日期 | 
        最终得分 | 
        100 | 
            
    
    
        | 用户昵称 | 
         爆零自动机 | 
        是否通过 | 
        通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        0.002 s  | 
    
    
        | 提交时间 | 
        2017-11-03 22:27:11 | 
        内存使用 | 
        0.31 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <string>
#include <climits>
#include <cstdlib>
using namespace std;
int date1,date2;
int year1,year2,m1,m2,d1,d2;
int dm,dd;
int cnt;
bool fyear(int year1);
int fday(int year1);
int fmonth(int year1);
bool run(int year1);
int main()
{
	freopen("datea.in","r",stdin);
	freopen("datea.out","w",stdout); //331
	
	cin>>date1>>date2;
	year1=date1/10000;
	year2=date2/10000;
	m1=(date1%10000)/1e2;
	m2=(date2%10000)/1e2;
	d1=date1%100;
	d2=date2%100;
	
	if(fyear(year1))
	{
		dm=fmonth(year1);
		dd=fday(year1);
		if(dm>m1)
			cnt++;
		else if(dm==m1 && dd>=d1)
			cnt++;
	}
	for(int i=year1+1; i<year2; i++)
	{
		if(fyear(i)) cnt++;
	}
	
	if(year1!=year2 && fyear(year2))
	{
		dm=fmonth(year2);
		dd=fday(year2);
		if(dm<m2)
			cnt++;
		
		else if(dm==m2 && dd<=d2)
			cnt++;
	}
	cout<<cnt<<endl;
	return 0;
}
int fmonth(int year1)
{
	return (year1%10*10+(year1%100)/10);
}
int fday(int year1)
{
	return ((year1/100)%10*10)+(year1/1000);
}
bool run(int year1)
{
	if(year1%4==0 && year1%100!=0) return true;
	if(year1%400==0) return true;
	return false;
}
bool fyear(int year1)
{
	int day=fday(year1);
	int month=fmonth(year1);
	if(month>12 || month==0 || day==0) return false;
	switch (month)
	{
		case 1:
			if(day>31) return false; break;
		case 2:
			if(day>29 || (!run(year1) && day>28)) return false; break;
		case 3:
			if(day>31) return false; break;
		case 4:
			if(day>30) return false; break;
		case 5:
			if(day>31) return false; break;
		case 6:
			if(day>30) return false; break;
		case 7:
			if(day>31) return false; break;
		case 8:
			if(day>31) return false; break;
		case 9:
			if(day>30) return false; break;
		case 10:
			if(day>31) return false; break;
		case 11:
			if(day>30) return false; break;
		case 12:
			if(day>31) return false; break;
	}
	return true;
}