一本通1658超能粒子炮 改

2022-05-08 01:54:08 字數 1881 閱讀 4213

時間限制: 1000 ms         記憶體限制: 524288 kb

曾經發明了腦洞**儀與超能粒子炮的發明家 shtsc 又公開了他的新發明:超能粒子炮・改——一種可以發射威力更加強大的粒子流的神秘裝置。

超能粒子炮・改相比超能粒子炮,在威力上有了本質的提公升。它有兩個引數 n

'>

n、k'>k

,它會向每個編號為 0

'>

0 到 k

'>

k(包含兩端)的位置 i

'>i

i 發射威力為cni

mod2333

'>cinmod2333

的粒子流。

現在 shtsc 給出了他的超能粒子炮・改的引數,讓你求出其發射的粒子流的威力之和除以 2333

'>2

333 所得的餘數。

第一行乙個整數 t

'>t

表示資料組數。

之後 t

'>

t 行,每行兩個整數 n

'>

n、k'>

k,含義如題面描述。

t'>

t 行,每行乙個整數,表示其粒子流的威力之和模 2333

'>2

333 的值。

sol:想了一會以後感覺非常不可做,於是翻題解去了。。

一起膜拜這位大佬。。。

掏出他的過程設p=

2333,a

=kp,

b=k 

mod 

p'>p=2333, a=k/p, b=kmodp

,那麼有:

ps:最後一行第乙個f(n/p,k/p)應該改為f(n/p,k/p-1)

#include using

namespace

std;

typedef

long

long

ll;inline ll read()

while

(isdigit(ch))

return (f)?(-s):(s);

}#define r(x) x=read()inline

void

write(ll x)

if(x<10

)

write(x/10

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

);

return;}

#define w(x) write(x),putchar(' ')

#define wl(x) write(x),putchar('\n')

const ll mod=2333

;const

int n=2400

;int

t;ll c[n][n],f[n][n];

inline ll lucas(ll n,ll m)

inline ll calc(ll n,ll k)

intmain()

while(t--)

return0;

}/*input

45 5

10 7

1145 14

2333233323332333 2333

output

32968

763845

*/

view code

SHOI2015 超能粒子炮 改

設 f n k sum kc n i pmod 那麼根據盧卡斯定理我們知道 f n k sum kc times c c 0 times sum c i c 1 times sum c i c times sum c i c times sum c i sum c i times c 0 c 1 c...

SHOI2015 超能粒子炮 改

求 sum 2333 n,k leq 10 如果直接套盧卡斯還是比較容易想到分塊求解的 由 c n i c times c 可知,i p 相同的組合數另一部分分別是 i p,i p 1,i p 2.這部分可以搓到一起 令 s n k sum 具體來說,將這部分相同的部分放到一起,剩下的地方直接計算 ...

SHOI2015 超能粒子炮 改

首先我們要明確題目要我們求的是這個式子 sum kc n i 我們先從部分分看起 預處理出組合數暴力算就是了。複雜度 o n 2 由於我們要求的東西是在楊輝三角的一行,所以我們可以遞推求出改行組合數,遞推式為 c n c n m frac 證明的話就用組合數的定義式即可。複雜度 o k 這一檔對正解...