#P2010 迴文日期 的題解

題目描述

在平常生活中,經過年、月、日這三個要素能夠表示出一個惟一肯定的日期。html

牛牛習慣用88位數字表示一個日期,其中,前44位表明年份,接下來22位表明月 份,最後22位表明日期。顯然:一個日期只有一種表示方法,而兩個不一樣的日期的表 示方法不會相同。ios

牛牛認爲,一個日期是迴文的,當且僅當表示這個日期的8位數字是迴文的。現 在,牛牛想知道:在他指定的兩個日期之間包含這兩個日期自己),有多少個真實存 在的日期是迴文的。ide

一個88位數字是迴文的,當且僅當對於全部的i ( 1 \le i \le 8)i(1i8)從左向右數的第i個 數字和第9-i9i個數字(即從右向左數的第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

1 20110101
2 20111231
View Code

輸出 1

1

輸入 2

1 20000101
2 20101231
View Code

輸出 2

2

說明/提示

【樣例說明】

對於樣例1,符合條件的日期是20111102

對於樣例2,符合條件的日期是2001100220100102

【子任務】

對於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 }
View Code
相關文章
相關標籤/搜索