1. 程式人生 > >牛客練習賽30-A-迴文日期(構造)

牛客練習賽30-A-迴文日期(構造)

題目描述 

眾所周知,小K是nowcoder的暴政苟管理,所以小K很擅長踢樹,雖然本題與踢樹無關

小K喜歡將日期排列成yyyy-mm-dd的形式(位數不足添零補齊)的形式,雖然這與小K只會做迴文字串這道水題無關,但小K覺得日期組成的迴文串也是挺可愛的。作為一個涼心出題人,小K決定給你一個可愛的問題:給你兩個日期,求這兩個日期的閉區間內有多少個迴文的日期(輸入可能包含多組資料)

輸入描述:

第一行包含一個整數T,表示有T組資料

接下來T行,每行兩個“yyyy-mm-dd"形式的日期

輸出描述:

輸出共T行,每行輸出當前資料的迴文日期的個數

示例1

輸入

複製

1
1926-08-16
2333-12-21

輸出

複製

36

備註:

對於100%的資料,1 ≤ ? ≤ 10,且日期的形式一定是 YYYY-MM-DD,且輸 入日期一定合法,保證答案的年份不會超過4位

思路:直接構造迴文日期,判斷如果在起始年份和結束年份之間則cnt++。

AC程式碼:

#include <bits/stdc++.h>
using namespace std;
string str;
int q[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };

int main()
{
    int t; scanf("%d",&t);
    while(t--)
    {
        int year1,month1,day1,year2,month2,day2,cnt = 0;
        scanf("%d-%d-%d",&year1,&month1,&day1);
        scanf("%d-%d-%d",&year2,&month2,&day2);
        for(int m = 1; m < 13; m++)
        {
            for(int d = 1; d <= q[m]; d++)
            {
                int y = d%10*1000+d/10*100+m%10*10+m/10;
                if(y >= year1 && y <= year2) cnt++;
            }
        }
        printf("%d\n",cnt);
    }
}