之前在考試的時候,因為太菜,沒有想到正解,因而打了乙個30pt
s30pts
30pt
s的暴力,居然沒有t。
30 pt
s30pts
30pts做法
根據乘法原理,最終答案為每個環節的方案數乘起來。
根據加法原理,乙個環節的方案數為
∑ j=
lrck
i+j−
lj
\sum_^c_+-}^
j=l∑r
cki
+j−l
j o(n
2)
o(n^)
o(n2
) 預處理組合數,然後 o(n
m)
o(nm)
o(nm
)統計即可。
100 pt
s100pts
100pts
做法每個環節實際上是要求
∑ j=
lrck
i+j−
lj=∑
j=lr
cl−k
ij
\sum_^c_+-}^=\sum_^c_}^
j=l∑r
cki
+j−l
j=j
=l∑r
cl−
kij
而根據組合數的恒等式,有:
∑ j=
lrcl
−kij
=cr+
1l−k
i+1−
cll−
ki+1
\sum_^c_}^=c^}+1}_-c^}+1}_
j=l∑r
cl−k
ij
=cr+
1l−k
i+1
−cl
l−ki
+1
那麼我們就可以直接將階乘o(n
)o(n)
o(n)
處理出來,再求逆元,這樣就可以做到o(m
)o(m)
o(m)
的統計。
talk is cheap, show you the code:
#include
using
namespace std;
const
int mod=
1e9+7;
intread()
/* 30pts
long long c[2005][2005];
int n,m;
void getc()
int main()
printf("%lld\n",ans);
return 0;}*/
const
int n=
1e5+10;
int n,m;
int fac[n]
,ifac[n]
;int
mul(
int x,
int y)
intpower
(int a,
int b,
int ret=1)
intcalcinv
(int x)
intc
(int a,
int b)
intdec
(int x,
int y)
intmain()
printf
("%d\n"
,ans)
;return0;
}
NOIP提高組 20151029模擬
其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...
NOIP提高組模擬 Value
相信大家一看到這道題就想起最經典的揹包問題,於是毫無疑問就往dp方向想。於是我們設出狀態轉移方程,設f i j k 為我要拿i個物品,已經選了j個,現在第j個我選了k的最大價值,那麼f i j k max,其中l為第j 1次選擇的物品。但很快我們發現,你這樣做是不行的,因為我們還要解決順序問題,選擇...
NOIP提高組模擬 幻象
phantom是一位愛思考的哲 學家。最近phantom得到了森 妖精的真傳。在他練功的時候,每秒他的思緒中都有一定的概率浮現出奇 異的幻象,持續x秒的幻象將產生x 2 的幻象值。phantom練功發自真心,他想知道,在n秒內他期望產生的幻象值是多少。因為持續x秒的幻象將產生x2 的幻象值,所以設乙...