日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

省常中模拟 Test4

發布時間:2024/4/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 省常中模拟 Test4 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

prime

數論

題意:分別求 1*n2*n3*n... n*n 關于模 p 的逆元。p 是質數,n < p

初步解法:暴力枚舉。因為 a 關于模 p 的逆元 b 滿足 ab mod p = 1,而 b < p,所以可以枚舉 b。但是由于沒有用 long long 導致爆零。

(下文用 ie(x) 表示 x 關于題目中 p 的逆元,且下文中的運算均在 mod p 的前提下)

正解:由于 ie(a) = ap-2,所以我們可以先用快速冪求出 n! 的逆元。由于 ie 是積性函數(見注釋),所以 ie(n!)=ie((n-1)!)*ie(n),即 ie((n-1)!)=ie(n!)*n,所以就能用線性時間求出 2~n-1 的階乘的逆元。同樣由上個式子可以推出,ie(n)=ie(n!)*(n-1)!,所以又可以用線性時間求出 2~n 的逆元。(1 的逆元始終是 1)最后再用線性時間求出 ie(a*n)=ie(a)*ie(n)

注釋:ie 是積性函數,(不嚴謹的)證明如下:

x a 關于 p 的逆元,y b 關于 p 的逆元,即 xa mod p = yb mod p = 1,則

xayb mod p = 1

?(ab)*(xy) mod p = 1

xy ab 關于模 p 的逆元,即 ie(ab) = xy = ie(a)*ie(b)

? ?

color

線段樹

題意:在線段上進行涂色,每次對一個區間涂色都會影響到區間的兩個端點,在詢問時,相鄰兩個點之間的開區間的顏色也計入總顏色中。如,假設 [1, 2] 先被涂成顏色1,然后端點1被涂成顏色2,端點2被涂成顏色3,則詢問區間 [1, 2] 時總的顏色種數為 3。顏色總數少于 60 種。

初步解法:直接普通的點線段樹,寫了三個多小時還是爆零。

正解:最棘手的問題就是兩個相鄰點之間的開區間的顏色如何保存。其實也很簡單:將每個區間的左右端點擴大到原來的兩倍,則區間的中點就可以用來表示中間這段開區間。所以正解不過就是把區間端點擴大兩倍然后進行普通的點線段樹操作即可。

關于顏色數的統計:無法直接從左右子樹的顏色數得到總區間的顏色數,因為左右子樹中的顏色可能有重復。而由于顏色種數不多,可以考慮用一個 64 位整數表示某個區間上有哪些顏色,那么對左右子節點的顏色值進行按位或操作即可得到總區間的顏色值。然后統計顏色值中有多少個1即可。

? ?

threefour

樹形動規

題意:假設在一棵有根樹上存在五個互不相同的節點,分別記為 a,b,c,d,z,若這 5 個點同時滿足以下要求:a,b,c,d,lca(a,b),lca(c,d),lca(lca(a,b),lca(c,d))這 7個節點互不相同,并且 z 是 lca(lca(a,b),lca(c,d))的祖先;那么五元組(a,b,c,d,z)表示了一棵合法的"不三不四樹"。同時,交換a,b,c,d,z的順序只算作一種。現在給定一棵以 1 號節點為根的樹,求滿足上述要求的"不三不四樹"的總數。輸出答案mod 1234567891后的結果。

初步解法:考場上寫完第二題已經只有 15 分鐘了,直接寫了個 rand() 騙分然后打掃雷去了。

正解:其實是比較明顯的樹形 DP 題。

「不三不四樹」的最終形態是這樣的:

(兩節點不一定相鄰,中間可以隔幾個點)

用 f(x, 0) 表示在以 x 為根的子樹中(包括 x)任選一個,一共有多少種方案;用 f(x, 1) 表示在以 x 為根的子樹中(包括 x)任選三個,一共有多少種方案;用 f(x, 2) 表示在 x 的左右子樹中各選三個,一共有多少種方案(x 的左右子樹各選 3 個對應了「不三不四樹」的底下兩層,x 作為「不三不四樹」的第二層)。

很明顯,f(x, 0) 即以 x 為根的整棵子樹的節點數。

f(x, 1) = sum{ f(i, 0)*f(j, 0) } + sum{ (k, 1) } i, j, k 是 x 的子節點

解釋一下:f(x, 1) 表示在整棵子樹中任選三個構成一棵滿二叉樹的方案數,那么有兩種情況:構成的樹的根節點是 x 或不是 x。如果構造出的樹的根節點是 x,那么再在不同的兩棵子樹中各選 1 個即可,由乘法原理,可得上式的第一部分;如果根節點不是 x,那么根節點必然在子樹中,所以加上子結點的 f(x, 1) 即可。

f(x, 2) = sum{ f(i, 1)*f(j, 1) }

由于 f(x, 2) 表示構造出的樹以 x 為根,所以不用加上子樹的 f(x, 2),用類似于上面那個遞推式的第一部分的方法計算。

則最終答案為 ans = sum{ f(x, 2)*depth(x) },depth 從 0 開始計算。(depth(x) 就代表了 x 有多少個祖先結點,x 的任意一個祖先結點都可以作為整棵「不三不四樹」的根)

轉載于:https://www.cnblogs.com/lsdsjy/p/3920528.html

總結

以上是生活随笔為你收集整理的省常中模拟 Test4的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。