HDU 4869 遞推 組合數取模)

2022-08-05 16:09:14 字數 884 閱讀 4354

problem turn the pokers (hdu 4869)

題目大意

有m張牌,全為正面朝上。進行n次操作,每次可以將任意ai張反面,詢問n次操作可能的狀態數。

解題分析

記正面朝上為1,朝下為0。

若最後有x個1,則對答案的貢獻為c(n,x)。所以只需要知道最後可能的1的個數。

假設已經有a個1,某次操作可以將b張牌反面,可以發現操作之後可能的1的個數相差2。

記錄每次操作後1的個數所在區間為[l ,r],即可能取到的個數為l , l+2 , l+4 , ...... , r 。

每次轉移分類討論一下,貪心轉移即可。

參考程式

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

#define n 100008

8#define mo 1000000009

9int

a[n];

10int

pa[n],pb[n];

11int

n,m;

1213

void calc(int &l,int &r,int

x)24

25int c(int x,int

y)28

29int quick_pow(int x,int

y)36

return

res;37}

3839

intmain()

52 }

view code

HDU 2035 人見人愛A B 乘方取模

time limit 1000 ms memory limit 32768 kb 求a b的最後三位數表示的整數。 說明 a b的含義是 a...