近期題目整理 6 1

2022-03-24 07:22:30 字數 1646 閱讀 2944

計算

\[\sum_^x^j\mod

\]其中,\(p\)為質數,\(n\le10^9\)。

結論很簡單,以下式子成立$$\sum_xj\mod=0$$

那麼我們只要求最後3項就可以獲得答案

這個結論可以依靠打表獲得,比賽時很多隊依靠打表發現了結論輕鬆的過了這題,而我們的電腦空閒長達1個小時卻沒有嘗試打表。對於一些沒有思路的題目不妨可以依靠這種方法尋找規律

還沒補,大概思路有,補完填坑

對於有根樹t,定義$$f(t)=\sum_dist(x,y)$$求\(n\)個節點的有根樹t中,滿足\(f(t)_\)和\(f(t)_\)的樹分別有多少種。

考慮無根樹,滿足\(f(t)_\)的樹一定是一條鏈,但是注意正鏈與反鏈相同,因此共有$$\frac\prod_^i$$種。

而滿足\(f(t)_\)的樹肯定是菊花樹(乙個點連著剩下\(n-1\)個點),共有$$n$$種。

然後考慮有根情況,而對於有根樹根不同樹便不同。因為n個點每個點都可以作為根,因此有根樹的數量就是無根樹的數量乘以\(n\)。

因此,結論:

\[f(t)_=\frac\prod_^i

\]\[f(t)_=n^2

\]

#includeusing namespace std;

typedef long long ll;

const ll mod = 1e9+7;

const ll inv = 5e8+4;

int main()

cout << ans1 << ' ' << ans2 << endl;

return 0;

}

691e - xor-sequences

長度為n的陣列中選取k個數字組成序列x(可重複選取),要求\(x_x_\)二進位制下1的位數是3的倍數,求滿足條件的陣列的數量。

設二維陣列\(d_\)儲存序列\(\)是否滿足要求,滿足要求為1不滿足為0,二維陣列\(c_\)儲存的是某一長度下\(\)(即以\(x_i\)為序列開頭,\(y_i\)為序列結尾)的方案數。

很顯然當長度為1時,\(d_=c_\).

那麼長度為3時,二維陣列\(c_\)所表示的意義(長度)可以由以下轉移式轉移:$$c_ = \sum_^d_d_$$可以理解成列舉k,以i開頭k結尾的序列和以k開頭j結尾的序列拼接起來是否合法,有多少種合法方案累加起來。而這個公式就是矩陣乘法

同理,當長度大於3時,$$c_ = \sum_^c_d_$$,這樣就可以使矩陣c的意義由\(l-1\)轉移到\(l\),那麼轉移到長度為k就要乘矩陣d共\(k-1\)次。

那麼做法就很明顯了,先預處理\(d_\),而由於長度為2時\(c_=d_\),而我們要讓矩陣c乘以矩陣d共\(k-1\)次,也就是d矩陣的\(k-1\)次冪。這題就轉換成矩陣快速冪了。

codeforces 691f

從n個數字中取2個,得分為兩個數字之積,當得分高於乙個閾值p時獲勝。給你m個數字p,問你以當前p為閾值時獲勝的數字對的數量。

先預處理每個數字的數量,然後直接列舉數字\)},計算有多少數字對可以湊成,最後對陣列求字首和就可以計算失敗的數字對。

這題直接列舉數字\)}複雜度是\(n2\),而我們可以換個思路,由列舉\)}計算\)}轉換為列舉\)},因為閾值p是有上限的。這樣列舉的複雜度就由\(n2\)轉換為\(n\log\)。

近期題目歸納(2016 07 08)

題意 給一串由ox組成的字串,根據x為 0 分,o為 1 分,當o連續多個時o的分數為它前面連續0的個數。解法 統計連續o的個數就好啦。用乙個標記變數tag來計算,遇到x時tag 0,遇到乙個o就對tag進行 1。到每個位置只要累加tag就好了。include include include inc...

Linux入門 近期學習整理

前幾天去了下洛陽玩。回來之後就連續看到了編寫應用程式 不過今天和訊為的技術支援聊了一下,他給我發了一下聊天記錄主要是告訴乙個新人如何入門 總結一下就是 這些都是訊為技術人員提供的 uboot 就是乙個bootloader作為引導,uboot 檢測記憶體,儲存等裝置,並且設定處理器等裝置的時鐘等等,期...

C語言 近期學習整理

1 sizeof和strlen有哪些區別?區別如下 1 sizeof是操作符,strlen是函式。2 sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsignedint型別,該型別保證能容納實現所建立的最大物件的位元組大小。3 sizeof可以用型別做引數,strlen...