GDOI2018Day1模擬4 17 鳧趨雀躍

2021-08-19 02:03:26 字數 1435 閱讀 5652

把(0,0)也視為乙個ki

。顯然要容斥原理。

列舉乙個s,去求至少有s步是不合法的方案數。

這個要dp三個東西。fi

,j表示走了i步,∑k

=j*10的方案數。

橫縱座標沒有關聯,可以分開dp。pi

,j表示走了i步,橫座標之和為j的方案數。qi

,j表示走了i步,縱座標之和為j的方案數。那麼a

ns=∑

i,j(

−1)i

∗(ri

)∗fi

,j∗p

r−i,

tx−j

∗10∗q

r−i,

ty−j

∗10

這個為什麼是對的呢。

考慮一種確切的走法,它有t步是不合法的。

在上面那個式子中,它會被計算∑t

i=0(

−1)i

∗(ti

)=[t

=0]

所以上面那個式子剛好只會計算沒有出現過不合法的方案數。

這個好像是先有結論再有證明,但是似乎也只能是這樣了。

#include

#define min(a, b) ((a) < (b) ? (a) : (b))

#define max(a, b) ((a) > (b) ? (a) : (b))

#define fo(i, x, y) for(int i = x; i <= y; i ++)

using

namespace

std;

const

int mo = 1e4 + 7;

int tx, ty, mx, my, r, k, k[55], ans, bz[81];

int f[1605][81], p[1605][801], q[1605][801], s[801], c[1601][1601];

int main()

fo(j, 0, ty) s[j] = 1;

fo(i, 1, r)

c[0][0] = 1;

fo(i, 1, r)

fo(i, 0, r) fo(j, 0, min(tx, ty) / 10)

ans += ((i % 2) ? -1 : 1) * f[i][j] % mo * p[r - i][tx - j * 10] % mo * q[r - i][ty - j * 10] % mo * c[r][i] % mo;

printf("%d", (ans % mo + mo) % mo);

}

GDOI模擬4 24 4 26總結DAY1

day1 第一題,一看就知道是字尾陣列,不過忘記了字尾陣列有乙個東西怎麼線性處理,所以就只能夠暴力搞字尾陣列,所以也只能暴力搞字尾陣列,然後暴力的來求。把height從大到小填進去是乙個很套路的東西,但是只打過一次字尾陣列,對他的用法還不太熟練。所以對於很多省選的知識,由於打得不多,所以很多東西還不...

GDOI2018模擬7 8 質數

將1 n分成盡可能小的集合,使得每個集合的元素均為質數 乙個數n n 6000 第一行乙個數m表示分成幾塊 第二行n個1 m的數表示每個數分到哪一塊 2 1 2 2 1 1 1 1 2 這題很有趣 我們知道有個哥德 猜想 任意乙個足夠大的偶數可以分成兩個質數的和 由於目前人類沒有證明出它是錯的,而且...

GDOI2018模擬8 11 決戰

聽說暴力狀壓可以過?然而我常數不好只有90分 考慮普通的狀壓,f i s j 表示當前填到第i行,第i行的狀態為s,用了j個哲學 家的方案數 我們把最後一維看做多項式,用x j的係數表示答案 咦?模數是998244353哦,那我們是不是可以用ntt加速呢?如果我們求出對於所有wi 答案的多項式的點值...