vijos1964 夜夜的NOIP之旅

2021-08-08 02:51:19 字數 1174 閱讀 1178

有些人出題十分的不靠譜

說好的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 於是考慮減枝 題目要求價值總和最大,就按大 小排序 就從最大的選 然而僅僅這樣複雜度不會降 需要配合字尾和食用 當發現目前已選 後面待選的總和 即都選 依然比目前答案要小時,不搜 因為已經按大小排過序了,搜到較大答案的時間靠前的可能性...