有些人出題十分的不靠譜
說好的noip難度呢?
說好的noip普及組難度呢?
說好的noip普及組-的難度呢?
怎麼冒出了動態樹啊!
怎麼冒出了網路流啊!
怎麼冒出了微積分啊!
夜夜很傷心=_=
現在,有一套noip難度有nn個題,其中第ii個題的難度是1\times 2\times 3\times \cdots \times i1×2×3×⋯×i(也可以寫作i!i!)。
我們稱一套題的難度為nn個題的難度總和。
那麼給定nn,求這套題的難度。
然而,總有些人不想寫高精度(比如出題人),是出題人良心的要你算出對mm取模後的值就好了。
一行,兩個數,n和m
一行,你要輸出的答案
4 10007
33
對於20%的資料,n,m<=10
對於50%的資料,n,m<=1000000
對於100%的資料,n<=1000000000000000000,m<=1000000
每乙個測試點時限1秒。
對於樣例:
1 + 1*2 + 1*2*3 + 1*2*3*4 = 1 + 2 + 6 + 24 = 33
33 % 10007 = 33
乍眼一看,發現這道題並不好做
應為膜有兩種性質:
1.(a*b*c) mod d = ((a mod d)*b) mod d)*c) mod d
2.(a+b+c) mod d = ((a mod d)+b) mod d)+c) mod d
有了這兩個性質,我們就可以邊乘邊膜,邊加邊膜
可是這樣只能通過50%的點,因為這樣時間複雜度是o(n)
那該如何通過100%的資料呢?
我們分析一下:當n > m時,n! = 1*2*3*4*...*m*...*n
那n!就有m這個因數,也就是說,n! mod m = 0
那當n>m時讓n=m就好啦!
時間複雜度為o(min(n,m))
#include long long n,m,ans = 0,fac = 1;
int main()
printf("%i64d",ans%m);
return 0;
}
vijos1049 送給聖誕夜的禮品
題目大意 順次給出m個置換,反覆使用這m個置換對初始序列進行操作,問k次置換後的序列。m 10,k 2 31。題目分析 先將m個置換所使用的矩陣合併起來,然後做t k m次。剩下的k m次模擬即可。include include include include include include inc...
vijos1048 送給聖誕夜的賀卡
vijos1048 表示不是很懂為什麼這個是七級題。這是一道不明複雜度的玄學搜尋題 大概是sigma i,1,n c i,n n 50 然而實際上過所有資料30ms不到 這裡我們用鄰接表來存衝突關係 enm表示當前狀態該節點有多少個與其衝突的人 然後dfs下去 這就是樸素的思路 inline voi...
vijos1048 送給聖誕夜的賀卡
題目 不看資料範圍一定想貪心系列 暴搜就可以了?然而不行 tle 於是考慮減枝 題目要求價值總和最大,就按大 小排序 就從最大的選 然而僅僅這樣複雜度不會降 需要配合字尾和食用 當發現目前已選 後面待選的總和 即都選 依然比目前答案要小時,不搜 因為已經按大小排過序了,搜到較大答案的時間靠前的可能性...