20200720NOIP提高組模擬T2 寶石垂墜

2022-08-18 23:21:14 字數 1636 閱讀 4221

t組資料,對於每組資料,輸入兩個值n、k,表示有$k(k\in[1,1000])$種寶石,每種寶石數量為$n(n\in[1,10000000000])$且同種寶石之間完全相同.請你求出取出$x(x\in[1,n])$

個寶石且包含所有的k種寶石的排列個數.兩個排列不同,當且僅當存在同一位置的兩種寶石不同.

本題明顯組合數學題,先觀察若不受種類限制,則有$\sum_^k^$種,若限制有一種不能取,則有$c_^\cdot\sum_^(k-1)^$種......因此,可以使用容斥原理,令$g(x)=\sum_^x^$,則本題答案即為$\sum_^(-1)^c_^\cdot g(k-i)$

.接下來即討論如何高效求出$g(x)$.從結構上看,$g(x)$是乙個等比數列,所以我們可以分類討論:一、$x==1,g(x)=\sum_^ 1=n$;二、$x>1,g(x)=\sum_^ x^=\frac)}=\frac-x}$,接下來直接代入求解即可.

#include#include

#include

#include

#include

#include

#include

#define r register

#define next exnttttnext

#define debug puts("mlg")

#define mod 1234567891

using

namespace

std;

typedef

long

long

ll;typedef

long

double

ld;typedef unsigned

long

long

ull;

inline ll read();

inline

void

write(ll x);

inline

void

writesp(ll x);

inline

void

writeln(ll x);

ll t,n,k;

inline ll quickpow(ll x,ll y)

return

ans;

}inline ll inv(ll x)

ll jiecheng[

3000

];inline

void

calc()

}inline ll c(ll x,ll y)

inline ll g(ll x)

ll ans,t;

intmain()

writeln(ans);

}}inline ll read()

while(ch>='

0'&&ch<='9'

)

return x*t;

}inline

void

write(ll x)

if(x<=9)

write(x/10);putchar(x%10+'0'

);}inline

void

writesp(ll x)

inline

void

writeln(ll x)

NOIP提高組 矩陣

在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...

NOIP提高組2005 過河

過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...

NOIP提高組 20151029模擬

其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...