在平常生活中,經過年、月、日這三個要素能夠表示出一個惟一肯定的日期。html
牛牛習慣用88位數字表示一個日期,其中,前44位表明年份,接下來22位表明月 份,最後22位表明日期。顯然:一個日期只有一種表示方法,而兩個不一樣的日期的表 示方法不會相同。ios
牛牛認爲,一個日期是迴文的,當且僅當表示這個日期的8位數字是迴文的。現 在,牛牛想知道:在他指定的兩個日期之間包含這兩個日期自己),有多少個真實存 在的日期是迴文的。ide
一個88位數字是迴文的,當且僅當對於全部的i ( 1 \le i \le 8)i(1≤i≤8)從左向右數的第i個 數字和第9-i9−i個數字(即從右向左數的第ii個數字)是相同的。spa
例如:code
•對於2016年11月19日,用88位數字20161119表示,它不是迴文的。htm
•對於2010年1月2日,用88位數字20100102表示,它是迴文的。blog
•對於2010年10月2日,用88位數字20101002表示,它不是迴文的。input
每年中都有1212個月份:string
其中,1,3,5,7,8,10,121,3,5,7,8,10,12月每月有3131天;4,6,9,114,6,9,11月每月有3030天;而對於22月,閏年時有2929天,平年時有2828天。it
一個年份是閏年當且僅當它知足下列兩種狀況其中的一種:
1.這個年份是44的整數倍,但不是100100的整數倍;
2.這個年份是400400的整數倍。
例如:
•如下幾個年份都是閏年:2000,2012,20162000,2012,2016。
•如下幾個年份是平年:1900,2011,20141900,2011,2014。
兩行,每行包括一個88位數字。
第一行表示牛牛指定的起始日期。
第二行表示牛牛指定的終止日期。
保證date\_idate_i和都是真實存在的日期,且年份部分必定爲44位數字,且首位數字不爲00。
保證date 1date1 —定不晚於date 2date2。
一個整數,表示在date1date1和date2date2之間,有多少個日期是迴文的。
1 20110101 2 20111231
1 20000101 2 20101231
【樣例說明】
對於樣例1,符合條件的日期是20111102。
對於樣例2,符合條件的日期是20011002和20100102。
【子任務】
對於60%的數據,知足date1 = date2date1=date2。
思路:先構造迴文,具體就是先枚舉年份,而後構造,好比枚舉到2016年,構造的日期是20166102,保證是迴文的。而後再判斷這個日期是否科學(嗯,科學你懂得)
時間:O(n),n表明兩個日期範圍間年份的個數。
1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<map> 5 #include<set> 6 #include<queue> 7 #include<vector> 8 using namespace std; 9 int i,j,n,m,a,b,c,sum,ans; 10 int s[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; 11 int main() 12 { 13 scanf("%d%d",&n,&m); 14 for(i=1;i<=12;i++) 15 { 16 for(j=1;j<=s[i];j++) 17 { 18 c=(j%10)*1000+(j/10)*100+(i%10)*10+(i/10); 19 sum=c*10000+i*100+j; 20 if (sum<n||sum>m) 21 continue; 22 ans++; 23 } 24 } 25 printf("%d",ans); 26 return 0; 27 }