1. 程式人生 > >【BZOJ 4816】【SDOI 2017】數字表格

【BZOJ 4816】【SDOI 2017】數字表格

考慮到gcd(i,j)的這個形式是一個常見的莫比烏斯反演,嘗試建構函式。

1、列舉gcd,轉化為ans=nd=1f(d)h(d),其中h(d)=ni=1mj=1[gcd(i,j)==d]
2、h(d)是莫比烏斯反演的模板題,直接上結論:h(d)=ndk=1μ(k)ndkmdk,所以轉化為ans=nd=1f(d)h(d)=ndk=1μ(k)ndkmdk
做到這裡通過列舉約數的方法就能夠得到答案,這個方法的時間複雜度是O((n+m)34),但是乘上一個T就有可能超時。這樣至少就是60分。
3、設T=dk,並且改變一下運算順序(因為全部都是乘法),轉換為a

ns=nT=1(d|Tf(d)μ(Td))nTmT
4、記g(x)=d|Tf(d)μ(Td),現在如果我們已經知道了g(x)的字首積,我們就可以在O(NlogN)的複雜度內求出每次詢問,其中根號是分塊的近似複雜度,log是快速冪的複雜度;
5、那麼如何求g(x)呢?可以通過列舉d,對於每個滿足d|Tg(T)都乘上f(d)μ(Td),只需提前預處理μ(x)f(x)f(x)的逆元即可,根據調和級數的相關證明可以得到這部分的時間複雜度是O(lnNlogN)
6、那麼如何求f(x)的逆元呢?顯然不能O(P)求出所有數的逆元。可以選擇擴歐來做,時間複雜度為O(NlnN
)
,不過網上有O(N)的做法:設Si=i1ai,然後求出Sn的逆元invSn,然後通過遞推式invSi1=aiinvS

相關推薦

BZOJ 4816SDOI 2017數字表格

考慮到gcd(i,j)的這個形式是一個常見的莫比烏斯反演,嘗試建構函式。 1、列舉gcd,轉化為ans=∏nd=1f(d)h(d),其中h(d)=∑ni=1∑mj=1[gcd(i,j)==d]; 2、h(d)是莫比烏斯反演的模板題,直接上結論:h(d)=∑⌊

BZOJ 4816 4816: [Sdoi2017]數字表格 (莫比烏斯)

Doris剛剛學習了fibonacci數列。用f[i]表示數列的第i項,那麼 f[0]=0 f[1]=1 f[n]=f[n-1]+f[n-2],n>=2 Doris用老師的超級計算機生成了一個n×m的表格,第i行第j列的格子中的數是f[gcd(i,j)],其中gcd(i,j)表示i, j的最大公約數。

BZOJ 2753 滑雪與時間膠囊

geo discuss long tex algo 而且 margin bsp letter Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 2843 Solved: 993[Submit][Status][Discuss]

題解[國家集訓隊]Crash的數字表格 / JZPTAB

改變 sqrt 完成 base getchar () efi long tab   求解\(\sum_{i = 1}^{n}\sum_{j = 1}^{m}lcm\left ( i,j \right )\)。 有\(lcm\left ( i,j \right )=\fra

枚舉SDOI 2011bzoj 2241打地鼠

desc 其它 規模 遊戲 pos 內部 ++ ack 至少 2241: [SDOI2011]打地鼠 Time Limit: 10 Sec Memory Limi

BZOJ 1922SDOI 2010大陸爭霸(有限制的最短路)

(誰告訴我這是個分層最短路來著的???) 進入一個城市必須要這個城市所有結界都打破才能進 那我們可以邊炸邊走 也就是說 我們可以維護d1陣列:走到的時間(結界可能沒炸完) d2陣列:可進入的時間(結界都被炸完了) d陣列:真實的到達時間 容易發現d[i]=max(d1[i],d2[2]) 那我們就用dijks

BZOJ5120: [2017國家集訓隊測試]無限之環-最小費用流最大流

傳送門:bzoj5120 題解 要求所有接頭相連,實際上就是將邊拆成入度和出度,要求滿流。 將每個點拆成五個點,分別表示上下左右和中心點。按橫縱座標和奇偶進行黑白染色,源點 S

BZOJ 48702017六省聯考組合數問題

其實我剛看到題目跟大部分人的反應是一樣的,暴力Lucas定理。。。 後來發現沒說模數一定是質數,那沒事還是能騙好多分的。 然而事實上是那些暴力分根本用不到Lucas定理。。。 正解: 所求式子的

BZOJ 1660 [Usaco2006 Nov]Bad Hair Day 亂發節

silver trac mem status add span %d php bmi 1660: [Usaco2006 Nov]Bad Hair Day 亂發節 Time Limit: 2 Sec Memory Limit: 64 MB Submit: 678

BZOJ3971 [WF2013]Матрёшка

數組 .html ide html cstring str n) div x優化 【算法】區間DP 【題解】 參考寫法:BZOJ 3971 Матрёшка 解題報告 第二個DP可以預處理mex優化到O(nM+n2),不過我懶…… 第一個DP有另一種寫法:不預處理,在一個n

BZOJ2049 [Sdoi2008]Cave 洞穴勘測

.com oid pre sdoi2008 print reserve mes tdi down 【算法】Link-Cut Tree 【題解】lct 不是很懂你們會壓常數的>_<! #include<cstdio> #include<alg

BZOJ3676 [Apio2014]回文串

esp ret 結點 += lap first trees db4 lld 【算法】回文樹 【題解】建回文數,然後一個回文子串出現的次數就是結點被訪問的次數以及能包含它的結點被訪問的次數。 根據fail樹反向建新樹,那麽答案就是結點所在子樹的權值和(權值就是結點被訪問次數)

BZOJ1130 N的階乘的長度 V2(斯特林近似)

n) ges src algo span ace pan nbsp closed 【算法】數學 【題解】斯特林公式: #include<cstdio> #include<algorithm> #include<cmath> usin

bzoj 2002彈飛綿羊

getchar() esp getchar main output time 需要 top nbsp Description 某天,Lostmonkey發明了一種超級彈力裝置,為了在他的綿羊朋友面前顯擺,他邀請小綿羊一起玩個遊戲。遊戲一開始,Lostmonkey在地上沿著一

bzoj 3675[Apio2014]序列分割

fde 操作 using con 列分割 bzoj mes input 遊戲 Description 小H最近迷上了一個分隔序列的遊戲。在這個遊戲裏,小H需要將一個長度為n的非負整數序列分割成k+1個非空的子序列。為了得到k+1個子序列,小H需要重復k次以下的步驟: 1.小

bzoj 3669[Noi2014]魔法森林

str 得到 none data style iostream -a 說明 out Description 為了得到書法大家的真傳,小E同學下定決心去拜訪住在魔法森林中的隱士。魔法森林可以被看成一個包含個N節點M條邊的無向圖,節點標號為1..N,邊標號為1..M。初始時小E

bzoj 1096[ZJOI2007]倉庫建設

esp pan 建設 col 意義 none sum pla 工廠 Description   L公司有N個工廠,由高到底分布在一座山上。如圖所示,工廠1在山頂,工廠N在山腳。由於這座山處於高原內陸地區(幹燥少雨),L公司一般把產品直接堆放在露天,以節省費用。突然有一天,L

bzoj 3779重組病毒

在操作 答案 opened 不同 family req preview edge -1 Description 黑客們通過對已有的病毒反編譯,將許多不同的病毒重組,並重新編譯出了新型的重組病毒。這種病毒的繁殖和變異能力極強。為了阻止這種病毒傳播,某安全機構策劃了一次實驗,來

BZOJ3502 PA2012 Tanie linie

一位 == 可能 const ring 變化 過多 opened 個數 【算法】 【題解】 胡策k≤10的環狀DP做法: 1.欽定法:先確定第一位(可能和第n位)的狀態,然後後面正常做DP,顯然正確答案是一定會被記錄的,因為從整體上看不會有影響。 2.環的特性:取的段和不取

bzoj 4764彈飛大爺

數組 har hide clas etc getc led wap 觀察 Description 自從WC退役以來,大爺是越來越懶惰了。為了幫助他活動筋骨,也是受到了彈飛綿羊一題的啟發,機房的小夥伴們決定齊心合力構造一個下面這樣的序列。這個序列共有N項,每項都代表了一個小夥