1148 2月29日(容斥原理)

2021-08-17 04:26:23 字數 1312 閱讀 7962

時間限制:

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

思路:用for迴圈求解肯定tle,一開始資料沒看仔細,tle好幾發,看得別人的思路就是使用容斥原理。

**:

/*

*/#include #include #include #include #include #include #include #define inf 1e9

const int maxn=5000+100;

typedef long long ll;

using namespace std;

int main()

if (strcmp(month2,"january")==0 || (strcmp(month2,"february")==0&&day2<29))

count = (year2>>2)-(year1>>2);

count = count -(year2/100-year1/100);

count += (year2/400-year1/400);

printf ("case #%d: %d\n", i, count);}}

return 0;

}

容斥原理 數論

兩個集合的容斥關係公式 a b a b a b a b 重合的部分 三個集合的容斥關係公式 a b c a b c a b b c c a a b c 最後可以推廣到n個集合,集合裡的元素為奇數則加,偶數減 hdu 4135 很簡單,直接求出所有的質因子,然後容斥解決 author crystal ...

容斥原理,反演

大概知道為什麼自己水平比較渣啦。一開始只會反演,然後被容斥驚豔到。然後寫了一段時間容斥,反演忘光光。所以融會貫通真的很難。多校的三道題,當時是用反演做的。事實上以前就知道容斥跟莫比烏斯函式值的關係,然後熟練掌握 然後一段時間沒用就忘了哈。簡單來說就是,求乙個數和乙個集合中的數互質的個數,把集合中乙個...

關於容斥原理

容斥原理大概是這樣的,以長方體體積並為例,我們需要用容斥原理容斥出若干個長方體體積的並.首先,我們將每個長方體標號為1 n,那麼這些長方體的取捨顯然可以表示為乙個二進位制的數字s.設f s 表示長方體取捨狀態為s時,長方體的體積並,於是我們可以知道f 111111 有n個1 就是我們最終的所求.好,...