2023年程式設計之美(資格賽) 2月29日

2021-09-06 22:30:49 字數 1950 閱讀 9527

時間限制:2000ms

單點時限:1000ms

記憶體限制:256mb

給定兩個日期,計算這兩個日期之間有多少個2月29日(包括起始日期)。

1. 年份能被4整除但不能被100整除

2. 年份能被400整除

第一行為乙個整數t,表示資料組數。

之後每組資料報含兩行。每一行格式為"month day, year",表示乙個日期。month為中的乙個字串。day與year為兩個數字。

資料保證給定的日期合法且第乙個日期早於或等於第二個日期。

對於每組資料輸出一行,形如"case #x: y"。x為資料組數,從1開始,y為答案。

1 ≤ t ≤ 550

小資料:

2000 ≤ year ≤ 3000

大資料:

2000 ≤ year ≤ 2×109

樣例輸入

4

january 12, 2012

march 19, 2012

august 12, 2899

august 12, 2901

august 12, 2000

august 12, 2005

february 29, 2004

february 29, 2012

樣例輸出

case #1: 1

case #2: 0

case #3: 1

case #4: 3

這道題,過小資料再簡單不過了,但是要過大資料的話,還是有一點考驗人的:

我們這裡只需要注意這幾點就可以做了:

如何求任意乙個時間段的閏年數?

方法有很多,但是要說到高效率的話,用這個還是不錯的, year/4 -year/100 +year/400 ;

但是由於還是要找到最近的閏年年份才能算簡化這道題、**如下

**:

1

//#define _crt_secure_no_warnings2//

#define local

34 #include5 #include

6 #include7 #include8 #include

9 #include10

11#define __int int

1213

1415

using

namespace

std;

1617

const

char month[13][15] =;

2526

struct

mydate ;

3435

//判斷是否是閏年

36bool

isprimer(__int year)

4243

//輸入介面

44void input(mydate &ins)

4950

//將月份轉化為數字部分

51void change(mydate &aa) 58}

59}6061

//計算年份與年份間有多少個閏年

62 __int work(const mydate &star, const mydate &_end) 72}

7374

for (__int var = _end.year; var >= star.year; var--) 79}

8081

if (fir_pr >=star.year && las_pr>=star.year )

9192

if ( las_pr ==_end.year ) 95}

96return

res;97}

9899

intmain()

116117

118return0;

119 }

截圖:

2015程式設計之美資格賽 A 2月29日

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定兩個日期,計算這兩個日期之間有多少個2月29日 包括起始日期 1.年份能被4整除但不能被100整除 2.年份能被400整除 第一行為乙個整數t,表示資料組數。之後每組資料報含兩行。每一行格式為 month day,year ...

程式設計之美2015資格賽

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定兩個日期,計算這兩個日期之間有多少個2月29日 包括起始日期 1.年份能被4整除但不能被100整除 2.年份能被400整除 第一行為乙個整數t,表示資料組數。之後每組資料報含兩行。每一行格式為 month day,year ...

程式設計之美資格賽

時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 給定2個樹a和b,保證a的節點個數 b的節點個數。現在你需要對樹a的邊進行二染色。乙個好的染色方案,指不存在乙個樹a中的連通塊,同時滿足以下2個條件 1.其中只有同色的邊 2.和b同構。兩個樹同構是指,存在乙個一一對映 既是單射...