ACM数学(转)
從放暑假前周sir給我講了一個(gè)用polya計(jì)數(shù)法和burnside定理做的題目(pku2409)后,突然覺得組合數(shù)學(xué)挺有意思,然后從那時(shí)起到現(xiàn)在幾乎都在做這類的題目。 做到現(xiàn)在感覺這類題目的一些基本知識(shí)點(diǎn)都差不多有所了解了,水題也刷了不少,但還有很多難題自己實(shí)在是做不動(dòng),所以準(zhǔn)備把這類題目先放一放,然后把前段時(shí)間做的水題整理一下(供以后的初學(xué)者參考,大牛就不要看了哈,都是水題)。剩下的比較難的題目就慢慢來吧,以后做出來再不上,這個(gè)小結(jié)會(huì)不斷地更新。也希望大家有好的題目可以推薦一下,分享一下哈。 感謝:周sir,J_factory和福州大學(xué)神牛aekdycoin,大連理工大學(xué)神牛czyuan。 不扯了,進(jìn)入主題: 1.burnside定理,polya計(jì)數(shù)法 這個(gè)專題我單獨(dú)寫了個(gè)小結(jié),大家可以簡單參考一下:polya 計(jì)數(shù)法,burnside定理小結(jié) 2.置換,置換的運(yùn)算 置換的概念還是比較好理解的,《組合數(shù)學(xué)》里面有講。對(duì)于置換的冪運(yùn)算大家可以參考一下潘震皓的那篇《置換群快速冪運(yùn)算研究與探討》,寫的很好。 *簡單題:(應(yīng)該理解概念就可以了) pku3270 Cow Sorting http://acm.pku.edu.cn/JudgeOnline/problem?id=3270
pku1026 Cipher http://acm.pku.edu.cn/JudgeOnline/problem?id=1026 *置換冪運(yùn)算: pku1721 CARDS http://162.105.81.212/JudgeOnline/problem?id=1721 pku3128 Leonardo's Notebook http://162.105.81.212/JudgeOnline/problem?id=3128 *推薦:(不錯(cuò)的應(yīng)用) pku3590 The shuffle Problem http://162.105.81.212/JudgeOnline/problem?id=3590 3.素?cái)?shù),整數(shù)分解,歐拉函數(shù) 素?cái)?shù)是可能數(shù)論里最永恒,最經(jīng)典的問題了(我們的隊(duì)名就叫PrimeMusic^-^)。素?cái)?shù)的判斷,篩法求素?cái)?shù),大素?cái)?shù)的判斷···還有很多其他問題都會(huì)用到素?cái)?shù)。 *最水最水的:(心情不爽時(shí)用來解悶吧) pku1365 Prime Land pku2034 Anti-prime Sequences pku2739 Sum of Consecutive Prime Numbers pku3518 Prime Gap pku3126 Prime Path pku1595 Prime Cuts pku3641 Pseudoprime numbers pku2191 Mersenne Composite Numbers pku1730 Perfect Pth Powers pku2262 Goldbach's Conjecture pku2909 Goldbach's Conjecture *篩法: pku2689 Prime Distance(很好的一個(gè)應(yīng)用) http://162.105.81.212/JudgeOnline/problem?id=2689 *反素?cái)?shù): zoj2562 More Divisors http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2562 *素?cái)?shù)判斷,整數(shù)分解: 這兩題都要用到miller_rabin的素?cái)?shù)判斷和pollard_rho的整數(shù)分解,算法書上都會(huì)有,應(yīng)該是屬于模板題吧,不過最好看懂自己敲一遍。 pku1811 Prime Test http://acm.pku.edu.cn/JudgeOnline/problem?id=1811 pku2429 GCD & LCM Inverse http://acm.pku.edu.cn/JudgeOnline/problem?id=2429 *歐拉函數(shù): 數(shù)論里很多地方都能用到歐拉函數(shù),很重要的。 pku1284 Primitive Roots (很水) http://acm.pku.edu.cn/JudgeOnline/problem?id=1284
pku2407 Relatives (很水) http://acm.pku.edu.cn/JudgeOnline/problem?id=2407 pku2773 Happy 2006 http://162.105.81.212/JudgeOnline/problem?id=2773
pku2478 Farey Sequence (快速求歐拉函數(shù)) http://162.105.81.212/JudgeOnline/problem?id=2478
pku3090 Visible Lattice Points (法雷級(jí)數(shù)) http://acm.pku.edu.cn/JudgeOnline/problem?id=3090 *推薦:(歐拉函數(shù),費(fèi)馬小定理) pku3358 Period of an Infinite Binary Expansion http://acm.pku.edu.cn/JudgeOnline/problem?id=3358 *整數(shù)分解 這個(gè)也很重要的耶,包括大數(shù)的表示方法。 pku2992 Divisors http://acm.pku.edu.cn/JudgeOnline/problem?id=2992
fzu1753 Another Easy Problem http://acm.fzu.edu.cn/problem.php?pid=1753
hit2813 Garden visiting http://acm-hit.sunner.cn/judge/show.php?Proid=2813
pku3101 Astronomy (分?jǐn)?shù)的最小公倍數(shù)) http://acm.pku.edu.cn/JudgeOnline/problem?id=3101 4.擴(kuò)展歐幾里得,線性同余,中國剩余定理 這應(yīng)該是數(shù)論里比較重要的一個(gè)部分吧,這類的題目也挺多,具體的內(nèi)容最好先看看數(shù)論書,我也整理過一些,可以參考參考: http://hi.baidu.com/%B1%BF%D0%A1%BA%A2%5Fshw/blog/item/0676025d56a87d4afbf2c093.html *簡單題: pku1006 Biorhythms http://acm.pku.edu.cn/JudgeOnline/problem?id=1006
pku1061 青蛙的約會(huì) http://acm.pku.edu.cn/JudgeOnline/problem?id=1061
pku2891 Strange Way to Express Integers http://acm.pku.edu.cn/JudgeOnline/problem?id=2891
pku2115 C Looooops http://acm.pku.edu.cn/JudgeOnline/problem?id=2115
pku2142 The Balance http://162.105.81.212/JudgeOnline/problem?id=2142 *強(qiáng)烈推薦: sgu106 The equation http://acm.sgu.ru/problem.php?contest=0&problem=106
pku3708 Recurrent Function (經(jīng)典) http://acm.pku.edu.cn/JudgeOnline/problem?id=3708 5.約瑟夫環(huán)問題 這個(gè)問題還是比較有意思的,不是很難。 *簡單題: pku3517 And Then There Was One http://acm.pku.edu.cn/JudgeOnline/problem?id=3517
pku1781 In Danger http://acm.pku.edu.cn/JudgeOnline/problem?id=1781
pku1012 Joseph http://162.105.81.212/JudgeOnline/problem?id=1012
pku2244 Eeny Meeny Moo http://162.105.81.212/JudgeOnline/problem?id=2244 *推薦: pku2886 Who Gets the Most Candies? http://162.105.81.212/JudgeOnline/problem?id=2886 6.高斯消元法解方程 其實(shí)解方程并不是很難,就是按線性代數(shù)中學(xué)的那種方法,把系數(shù)矩陣化成上三角矩陣或數(shù)量矩陣,不過有些題目要判斷是否有解,或枚舉所有解。不過這類題目我認(rèn)為比較難的還是怎么去建立這個(gè)方程組,這個(gè)理解了,就沒什么大問題了。 *簡單題: pku1222 EXTENDED LIGHTS OUT http://162.105.81.212/JudgeOnline/problem?id=1222 pku1681 Painter's Problem http://162.105.81.212/JudgeOnline/problem?id=1681
pku1830 開關(guān)問題 http://162.105.81.212/JudgeOnline/problem?id=1830 *推薦: pku2947 Widget Factory http://162.105.81.212/JudgeOnline/problem?id=2947
pku2065 SETI http://162.105.81.212/JudgeOnline/problem?id=2065 *強(qiáng)烈推薦: pku1753 Flip Game http://162.105.81.212/JudgeOnline/problem?id=1753
pku3185 The Water Bowls http://162.105.81.212/JudgeOnline/problem?id=3185 *變態(tài)題: pku1487 Single-Player Games http://162.105.81.212/JudgeOnline/problem?id=1487 7.矩陣 用矩陣來解決問題確實(shí)很常見,但我現(xiàn)在用到還不是很好,很多難題我還不會(huì)做。建議大家可以去看Matrix67的那篇關(guān)于矩陣的十個(gè)問題,確實(shí)很經(jīng)典,但不太好看懂。 *簡單: pku3070 Fibonacci http://162.105.81.212/JudgeOnline/problem?id=3070
pku3233 Matrix Power Series http://162.105.81.212/JudgeOnline/problem?id=3233
pku3735 Training little cats http://162.105.81.212/JudgeOnline/problem?id=3735 8.高次同余方程 有關(guān)這個(gè)問題我應(yīng)該是沒什么發(fā)言權(quán)了,A^B%C=D,我現(xiàn)在只會(huì)求D和B,唉,很想知道A該怎么求。就先推薦幾道題目吧,這里涉及到了一個(gè)baby-step,giant-step算法。 fzu1759 Super A^B mod C http://acm.fzu.edu.cn/problem.php?pid=1759
pku3243 Clever Y http://162.105.81.212/JudgeOnline/problem?id=3243
pku2417 Discrete Logging http://162.105.81.212/JudgeOnline/problem?id=2417
hdu2815 Mod Tree http://acm.hdu.edu.cn/showproblem.php?pid=2815 9.容斥原理,鴿巢原理 很有用的兩個(gè)定理,但好像單獨(dú)考這兩個(gè)定理的不是很多。 *鴿巢原理: pku2365 Find a multiple http://162.105.81.212/JudgeOnline/problem?id=2356
pku3370 Halloween treats http://162.105.81.212/JudgeOnline/problem?id=3370 *容斥原理: hdu1695 GCD http://acm.hdu.edu.cn/showproblem.php?pid=1695
hdu2461 Rectangles http://acm.hdu.edu.cn/showproblem.php?pid=2461 10.找規(guī)律,推公式 這類題目的設(shè)計(jì)一般都非常巧妙,真的是很難想出來,但只要找到規(guī)律或推出公式,就不是很難了。我很多都是在參考別人思路的情況下做的,能自己想出來真的很不容易。 *個(gè)人感覺都挺不錯(cuò)的: pku3372 Candy Distribution http://162.105.81.212/JudgeOnline/problem?id=3372
pku3244 Difference between Triplets http://162.105.81.212/JudgeOnline/problem?id=3244
pku1809 Regetni http://162.105.81.212/JudgeOnline/problem?id=1809
pku1831 不定方程組 http://162.105.81.212/JudgeOnline/problem?id=1831
pku1737 Connected Graph http://162.105.81.212/JudgeOnline/problem?id=1737 pku2480 Longge's problem http://162.105.81.212/JudgeOnline/problem?id=2480
pku1792 Hexagonal Routes http://acm.pku.edu.cn/JudgeOnline/problem?id=1792 11.排列組合,區(qū)間計(jì)數(shù),計(jì)數(shù)序列 這些題目可能需要一些組合數(shù)學(xué)知識(shí),基本上高中的知識(shí)就夠了。區(qū)間計(jì)數(shù)問題一般不難,但寫的時(shí)候需要仔細(xì)一些,各種情況要考慮到位。至于像卡特蘭數(shù),差分序列,斯特靈數(shù)···都還挺有意思,可以去看看《組合數(shù)學(xué)》。 *簡單題: pku1850 Code http://162.105.81.212/JudgeOnline/problem?id=1850 pku1150 The Last Non-zero Digit http://162.105.81.212/JudgeOnline/problem?id=1150
pku1715 Hexadecimal Numbers http://162.105.81.212/JudgeOnline/problem?id=1715
pku2282 The Counting Problem http://162.105.81.212/JudgeOnline/problem?id=2282 pku3286 How many 0's? http://162.105.81.212/JudgeOnline/problem?id=3286 *推薦: pku3252 Round Numbers http://162.105.81.212/JudgeOnline/problem?id=3252 *計(jì)數(shù)序列: pku1430 Binary Stirling Numbers http://162.105.81.212/JudgeOnline/problem?id=1430
pku2515 Birthday Cake http://acm.pku.edu.cn/JudgeOnline/problem?id=2515
pku1707 Sum of powers http://acm.pku.edu.cn/JudgeOnline/problem?id=1707 12.二分法 二分的思想還是很重要的,這里就簡單推薦幾個(gè)純粹的二分題。 *簡單: pku3273 Monthly Expense http://162.105.81.212/JudgeOnline/problem?id=3273
pku3258 River Hopscotch http://162.105.81.212/JudgeOnline/problem?id=3258
pku1905 Expanding Rods http://162.105.81.212/JudgeOnline/problem?id=1905
pku3122 Pie http://162.105.81.212/JudgeOnline/problem?id=3122 *推薦: pku1845 Sumdiv http://acm.pku.edu.cn/JudgeOnline/problem?id=1845 13.穩(wěn)定婚姻問題 無意中接觸到這個(gè)算法,還蠻有意思的,《組合數(shù)學(xué)》中有詳細(xì)的介紹。 pku3487 The Stable Marriage Problem http://acm.pku.edu.cn/JudgeOnline/problem?id=3487 zoj1576 Marriage is Stable http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1576 14.數(shù)位類統(tǒng)計(jì)問題 在航點(diǎn)月賽中第一次接觸到這類問題,scau大牛little龍推薦我看了一篇論文,09年劉聰?shù)摹稖\談數(shù)位類統(tǒng)計(jì)問題》,這篇論文相當(dāng)精彩,也相當(dāng)詳細(xì),每道題都有詳細(xì)的分析和作者的參考代碼。所以我也沒什么可說的了,這些題的代碼我博客里也就不貼了,大家直接去看論文吧。 簡單: ural1057 Amount of degrees http://acm.timus.ru/problem.aspx?space=1&num=1057
spoj1182 Sorted bit squence https://www.spoj.pl/problems/SORTBIT/
hdu3271 SNIBB http://acm.hdu.edu.cn/showproblem.php?pid=3271
較難: spoj2319 Sequence https://www.spoj.pl/problems/BIGSEQ/
sgu390 Tickets http://acm.sgu.ru/problem.php?contest=0&problem=390
以上分類的題目在我的博客里都可以找到詳細(xì)的解題報(bào)告和參考代碼,由于比較麻煩就沒加鏈接,需要的可以用我的站內(nèi)搜索找到。 本小結(jié)會(huì)不斷更新,轉(zhuǎn)載請(qǐng)注明出處。 嚴(yán)重聲明:本文只適合ACM初學(xué)者,路過的大牛如有相同類型的比較好的題目可以推薦一些啊。 來自: http://hi.baidu.com/%B1%BF%D0%A1%BA%A2%5Fshw/blog/item/5305e12c7289973e359bf768.html
?
http://apps.hi.baidu.com/share/detail/15350489
?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150對(duì)數(shù)學(xué)類題目小結(jié)中的題目的簡單解題報(bào)告: 偶然在網(wǎng)上看到某牛人發(fā)的數(shù)學(xué)題目小結(jié),于是拷了回來做,下面每道題目后面注釋的是我寫的簡單解題報(bào)告(有些只是注意事項(xiàng)),而且并非所有都有做,所以希望大家理解,目前正在更新中。 原文連接在這里:http://hi.baidu.com/%B1%BF%D0%A1%BA%A2_shw/blog/item/5305e12c7289973e359bf768.html 這里題目之前有‘ #’ 的表示已過,‘ ?’ 表示做了但還沒過。 /******************************************************************************************/ 1.burnside 定理,polya 計(jì)數(shù)法 這個(gè)大家可以看brudildi 的《組合數(shù)學(xué)》,那本書的這一章寫的很詳細(xì)也很容易理解。最好能完全看懂了,理解了再去做題,不要只記個(gè)公式。 * 簡單題:(直接用套公式就可以了) # pku2409 Let it Bead // 翻轉(zhuǎn)時(shí)注意珠子為奇偶的情況。 http://acm.pku.edu.cn/JudgeOnline/problem?id=2409 # pku2154 Color//LTC 的題目,看《具體數(shù)學(xué)》p141 ,有個(gè)化簡的公式。 http://acm.pku.edu.cn/JudgeOnline/problem?id=2154 # pku1286 Necklace of Beads // 和2409 一樣 http://acm.pku.edu.cn/JudgeOnline/problem?id=1286 * 強(qiáng)烈推薦:(這題很不錯(cuò)哦,很巧妙) # pku2888 Magic Bracelet // 見月賽解題報(bào)告.A[i][j] 為可達(dá)矩陣. 而且注意約數(shù)的個(gè)數(shù)范圍。其中矩陣的冪可以預(yù)先求出所有matrix[2^i] 出來,然后根據(jù)二進(jìn)制來 求。 http://162.105.81.212/JudgeOnline/problem?id=2888 2. 置換,置換的運(yùn)算 置換的概念還是比較好理解的,《組合數(shù)學(xué)》里面有講。對(duì)于置換的冪運(yùn)算大家可以參考一下潘震皓的那篇《置換群快速冪運(yùn)算研究與探討》,寫的很好。 * 簡單題:(應(yīng)該理解概念就可以了) # pku3270 Cow Sorting // 列出置換,然后對(duì)于每一個(gè)置換循環(huán),不斷用環(huán)中的最小的那個(gè)和其他的進(jìn)行換位,可以得到最優(yōu)。另外還有一種情況就是用整個(gè)置換最小的那個(gè)和該環(huán)進(jìn)行換位,對(duì)于每個(gè)環(huán)求出這兩個(gè)的最小值加起來就可以了。 http://acm.pku.edu.cn/JudgeOnline/problem?id=3270 # pku1026 Cipher // 先找出所有置換循環(huán),然后對(duì)于每一位來計(jì)算k% 循環(huán)長度后對(duì)應(yīng)于哪個(gè)位置,O(n) 復(fù)雜度。注意讀寫方面的東西。 http://acm.pku.edu.cn/JudgeOnline/problem?id=1026 * 置換冪運(yùn)算: # pku1721 CARDS // 詳細(xì)見05 集訓(xùn)隊(duì)論文《置換群快速冪運(yùn)算研究與探討》。 http://162.105.81.212/JudgeOnline/problem?id=1721 # pku3128 Leonardo's Notebook// 摘自:http://blog.csdn.net/J_Factory/archive/2008/08/28 /2845330.aspx 題目意思是:一個(gè)置換是否可以由另一個(gè)置換的平方得來的。一個(gè)置換的平方,原來偶數(shù)長的循環(huán)會(huì)被分裂成兩段長度相等的循環(huán),而奇數(shù)長的循環(huán)不會(huì)被分裂。題目只是問是否存在,所以只要看所給置換中偶數(shù)長的循環(huán)是否成對(duì),否則就不能由一個(gè)置換的平方得來。 補(bǔ)充:因?yàn)槿绻o置換的循環(huán)是偶數(shù),則肯定是由分裂過來的,那么一定是成對(duì)的,否則如果是奇數(shù),那么有可能是原來是奇數(shù),也有可能是原來的偶數(shù)分裂成兩個(gè)奇數(shù)循環(huán)。 http://162.105.81.212/JudgeOnline/problem?id=3128 * 推薦:(不錯(cuò)的應(yīng)用) # pku3590 The shuffle Problem // 把n 分解成若干個(gè)數(shù),使得他們的lcm 最大。在所取的數(shù)都是素?cái)?shù)冪的時(shí)候是最大的,所以可以用遞歸來枚舉所有的分解情況,而且由于要輸出序最小的,所以對(duì)于剩下的數(shù)可以直接單獨(dú)都作為一個(gè)循環(huán),這樣就可以使得序最小了。此外,這道題目需要注意求最大的lcm 的時(shí)候不能用dp 來做,因?yàn)檫@個(gè)具有后效 性,局部最優(yōu)不一定使得全局最優(yōu)。 http://162.105.81.212/JudgeOnline/problem?id=3590 3. 素?cái)?shù),整數(shù)分解,歐拉函數(shù) 素?cái)?shù)是可能數(shù)論里最永恒,最經(jīng)典的問題了(我們的隊(duì)名就叫PrimeMusic^-^ )。素?cái)?shù)的判斷,篩法求素?cái)?shù),大素?cái)?shù)的判斷··· 還有很多其他問題都會(huì)用到素?cái)?shù)。 * 最水最水的:(心情不爽時(shí)用來解悶吧) # pku1365 Prime Land # pku2034 Anti-prime Sequences// 直接搜索,用DL 優(yōu)化會(huì)快很多。 # pku2739 Sum of Consecutive Prime Numbers pku3518 Prime Gap pku3126 Prime Path pku1595 Prime Cuts pku3641 Pseudoprime numbers pku2191 Mersenne Composite Numbers pku1730 Perfect Pth Powers pku2262 Goldbach's Conjecture pku2909 Goldbach's Conjecture * 篩法: # pku2689 Prime Distance (很好的一個(gè)應(yīng)用)// 先找出sqrt(2^32) 內(nèi)的所有素?cái)?shù),然后類似篩選法篩選掉[l,u] 范圍內(nèi)的數(shù) http://162.105.81.212/JudgeOnline/problem?id=2689 * 反素?cái)?shù): # zoj2562 More Divisors //waing... 后記:素?cái)?shù)表少打了一個(gè)19 ~暈死啊~。。 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2562 * 素?cái)?shù)判斷,整數(shù)分解: 這兩題都要用到miller_rabin 的素?cái)?shù)判斷和pollard_rho 的整數(shù)分解,算法書上都會(huì)有,應(yīng)該是屬于模板題吧,不過最好看懂自己敲一 遍。 # pku1811 Prime Test // 學(xué)習(xí)miller 和pollard 的題目。 http://acm.pku.edu.cn/JudgeOnline/problem?id=1811 # pku2429 GCD & LCM Inverse // 分解lcm/gcd 為互質(zhì)的p,q ,要用到Miller Rabin 和Pollard rho 算法,基本上做出來之后都是模板題了。 http://acm.pku.edu.cn/JudgeOnline/problem?id=2429 * 歐拉函數(shù): 數(shù)論里很多地方都能用到歐拉函數(shù),很重要的。 # pku1284 Primitive Roots (很水)// 定理:對(duì)于奇素?cái)?shù)m, 原根個(gè)數(shù)為phi(phi(m)), 由于phi(m)=m-1, 所以為phi(m-1) http://acm.pku.edu.cn/JudgeOnline/problem?id=1284 # pku2407 Relatives (很水) http://acm.pku.edu.cn/JudgeOnline/problem?id=2407 # pku2773 Happy 2006 //n 之后的互質(zhì)的數(shù)都是n 之前的加上n 的倍數(shù)的。 http://162.105.81.212/JudgeOnline/problem?id=2773 # pku2478 Farey Sequence (快速求歐拉函數(shù))// 求前n 個(gè)歐拉函數(shù)的和,用學(xué)習(xí)指導(dǎo)里面的n*(1+lnln(n)) 的算法就可以了,非常快。 http://162.105.81.212/JudgeOnline/problem?id=2478 # pku3090 Visible Lattice Points (法雷級(jí)數(shù)) http://acm.pku.edu.cn/JudgeOnline/problem?id=3090 * 推薦:(歐拉函數(shù),費(fèi)馬小定理) # pku3358 Period of an Infinite Binary Expansion// 轉(zhuǎn)化為高次同余方程。 http://acm.pku.edu.cn/JudgeOnline/problem?id=3358 * 整數(shù)分解 這個(gè)也很重要的耶,包括大數(shù)的表示方法。 # pku2992 Divisors// 注意預(yù)處理,有很多組數(shù)據(jù). http://acm.pku.edu.cn/JudgeOnline/problem?id=2992 ? fzu1753 Another Easy Problem// 記得n! 有多少個(gè)p 的冪是怎么求的。 http://acm.fzu.edu.cn/problem.php?pid=1753 hit2813 Garden visiting http://acm-hit.sunner.cn/judge/show.php?Proid=2813 ? pku3101 Astronomy (分?jǐn)?shù)的最小公倍數(shù))// 高精度gcd ,超時(shí)中。 http://acm.pku.edu.cn/JudgeOnline/problem?id=3101 4. 擴(kuò)展歐幾里得,線性同余,中國剩余定理 這應(yīng)該是數(shù)論里比較重要的一個(gè)部分吧,這類的題目也挺多,具體的內(nèi)容最好先看看數(shù)論書,我也整理過一些,可以參考參考: http://hi.baidu.com/%B1%BF%D0%A1%BA%A2%5Fshw/blog/item/0676025d56a87d4afbf2c093.html * 簡單題: # pku1006 Biorhythms // 注意最后結(jié)果為0 或負(fù)數(shù)的情況 http://acm.pku.edu.cn/JudgeOnline/problem?id=1006 # pku1061 青蛙的約會(huì) http://acm.pku.edu.cn/JudgeOnline/problem?id=1061 # pku2891 Strange Way to Express Integers //x==a1(mod m1),x==a2(mod m2), 兩個(gè)方程可以求出x ,然后重新令a1 為求出的解x,m1=lcm(m1,m2) ,然后繼續(xù)和后面的進(jìn)行求解。注意數(shù)據(jù)運(yùn)算過程中可能溢出的問題。 http://acm.pku.edu.cn/JudgeOnline/problem?id=2891 # pku2115 C Looooops http://acm.pku.edu.cn/JudgeOnline/problem?id=2115 # pku2142 The Balance // 枚舉,x=x0+b/d*t ,直到x>min(x+y) http://162.105.81.212/JudgeOnline/problem?id=2142 * 強(qiáng)烈推薦: # sgu106 The equation // 求ax+by=c 的時(shí)候,考慮a,b 為零的特殊情況,此外,若a,b 不是非負(fù)數(shù),那么擴(kuò)展歐幾里德會(huì)有問題,于是我們可以把求x,y 變?yōu)榍?x'=-x,y'=-y ,此時(shí)a,b, 就可以變?yōu)榉秦?fù)數(shù)來處理,同時(shí)x',y' 的范圍也要相應(yīng)取反。而且在取得區(qū)間時(shí)候,要注意區(qū)間邊緣要進(jìn)行相應(yīng)的取 整。后記:要用cin,cout 才能AC ,用printf 會(huì)wa 。。。極度無奈中,偶然才發(fā)現(xiàn)的~_ ~! http://acm.sgu.ru/problem.php?contest=0&problem=106 # pku3708 Recurrent Function (經(jīng)典)// 具體數(shù)學(xué)第一章。對(duì)于每一位求出循環(huán)節(jié)m1 ,還有該位從m 達(dá)到k 最少要經(jīng)過r1 次標(biāo)號(hào)變化,于是就可以得到x==r1 (mod m1) ,然后同樣的方法求其他的位,接著就可以兩兩方程這樣解中國剩余定理。 http://acm.pku.edu.cn/JudgeOnline/problem?id=3708 5. 約瑟夫環(huán)問題 這個(gè)問題還是比較有意思的,不是很難。 * 簡單題: # pku3517 And Then There Was One http://acm.pku.edu.cn/JudgeOnline/problem?id=3517 # pku1781 In Danger http://acm.pku.edu.cn/JudgeOnline/problem?id=1781 # pku1012 Joseph // 考慮剩下k+1 個(gè)人,那么上一個(gè)出局的人肯定是壞人,所以考慮接下來一定要最后一個(gè)壞人出局,所以m==0 或1(mod k+1) 。然后枚舉m ,再驗(yàn)證。 http://162.105.81.212/JudgeOnline/problem?id=1012 # pku2244 Eeny Meeny Moo http://162.105.81.212/JudgeOnline/problem?id=2244 * 推薦: # pku2886 Who Gets the Most Candies?// 線段樹+ 反素?cái)?shù)。 http://162.105.81.212/JudgeOnline/problem?id=2886 6. 高斯消元法解方程 其實(shí)解方程并不是很難,就是按線性代數(shù)中學(xué)的那種方法,把系數(shù)矩陣化成上三角矩陣或數(shù)量矩陣,不過有些題目要判斷是否有解,或枚舉所有解。不過這類題目我認(rèn)為比較難的還是怎么去建立這個(gè)方程組,這個(gè)理解了,就沒什么大問題了。 * 簡單題: # pku1222 EXTENDED LIGHTS OUT // 解異或運(yùn)算的方程。n*m 個(gè)方程和未知數(shù)。 http://162.105.81.212/JudgeOnline/problem?id=1222 # pku1681 Painter's Problem http://162.105.81.212/JudgeOnline/problem?id=1681 # pku1830 開關(guān)問題 // 以上三題做法都一樣。 http://162.105.81.212/JudgeOnline/problem?id=1830 * 推薦: # pku2947 Widget Factory // 最好要化成嚴(yán)格的階梯型,方便判解。而且模某個(gè)數(shù)的時(shí)候解方程要用到擴(kuò)展歐幾里德算法。 http://162.105.81.212/JudgeOnline/problem?id=2947 # pku2065 SETI// 與上題一樣。 http://162.105.81.212/JudgeOnline/problem?id=2065 * 強(qiáng)烈推薦: # pku1753 Flip Game // 數(shù)據(jù)范圍比較小,枚舉可過。如果用高斯消元做,那么對(duì)于多解的時(shí)候也是需要枚舉的,而且這種類型不具有太大的擴(kuò)展性,這里高斯消元不見的比枚舉要優(yōu)越。 http://162.105.81.212/JudgeOnline/problem?id=1753 # pku3185 The Water Bowls // 同樣如果對(duì)于無數(shù)解的時(shí)候,就需要對(duì)解進(jìn)行枚舉。其實(shí)這道題目可以先枚舉第一位是否需要翻轉(zhuǎn),然后其他的就已經(jīng)確定了,不過需要注意如果第一位翻轉(zhuǎn)的時(shí)候,答案別忘了加上去,我因?yàn)檫@個(gè)搞了好久~~~郁悶。 http://162.105.81.212/JudgeOnline/problem?id=3185 // 同類題目,我自己加上去的。 pku1395 pku2055 ural1561 pku3254 * 變態(tài)題: pku1487 Single-Player Games http://162.105.81.212/JudgeOnline/problem?id=1487 7. 矩陣 用矩陣來解決問題確實(shí)很常見,但我現(xiàn)在用到還不是很好,很多難題我還不會(huì)做。建議大家可以去看Matrix67 的那篇關(guān)于矩陣的十個(gè)問題,確實(shí)很經(jīng)典, 但不太好看懂。 * 簡單: pku3070 Fibonacci http://162.105.81.212/JudgeOnline/problem?id=3070 pku3233 Matrix Power Series http://162.105.81.212/JudgeOnline/problem?id=3233 pku3735 Training little cats http://162.105.81.212/JudgeOnline/problem?id=3735 8. 高次同余方程 有關(guān)這個(gè)問題我應(yīng)該是沒什么發(fā)言權(quán)了,A^B%C=D ,我現(xiàn)在只會(huì)求D 和B ,唉,很想知道A 該怎么求。就先推薦幾道題目吧,這里涉及到了一個(gè)baby- step ,giant-step 算法。 # fzu1759 Super A^B mod C //a^b%c=a^(b%phi(c))%c , 注意a==c 的情況, http://acm.fzu.edu.cn/problem.php?pid=1759 # pku3243 Clever Y // 和上面差不多,不過c 不一定是素?cái)?shù),所以方法就是解出a^m*x+c*y=gcd(a^m,c) 的所有解來判斷,若無解則不管,因?yàn)閏 不是素?cái)?shù)可能 a^m 沒有逆。 http://162.105.81.212/JudgeOnline/problem?id=3243 # pku2417 Discrete Logging //hash ,最直接的離散對(duì)數(shù) http://162.105.81.212/JudgeOnline/problem?id=2417 ? hdu2815 Mod Tree // 超時(shí)中,時(shí)限好像挺緊的。 http://acm.hdu.edu.cn/showproblem.php?pid=2815 # sgu261 求A wa test 23.. 后記:原來是hash 有錯(cuò)誤,因?yàn)橛昧藇ector 后是從0 開始的,而我判斷hash 鏈表結(jié)束的是0 ,如果恰好最后一個(gè)是在vector 的0 位 置,那么就會(huì)忽略掉這個(gè)數(shù)據(jù),所以就會(huì)出現(xiàn)找不到那個(gè)數(shù)的情況。另外進(jìn)行最后答案輸出的時(shí)候,vector 的size ()是返回unsigned int 的,如果size( )是0 ,那么size()-1 就是2^32-1 了,所以這里就需要特別注意。 ? http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3538 //handling... 還沒有找出更好的方法解決當(dāng)a 和p 不互質(zhì)情況下的解法。 http://202.120.80.191/problem.php?problemid=2700 9. 容斥原理,鴿巢原理 很有用的兩個(gè)定理,但好像單獨(dú)考這兩個(gè)定理的不是很多。 * 鴿巢原理: # pku2356 Find a multiple // 同下。 http://162.105.81.212/JudgeOnline/problem?id=2356 # pku3370 Halloween treats////n 個(gè)數(shù),尋找c 個(gè)(c<=n) ,使得他們的和為c 的倍數(shù)。由抽屜原理,前n 個(gè)數(shù)的 mod c 肯定有重復(fù)的,那么一定存在一個(gè)區(qū)間使得他們的和是c 的倍數(shù)。 http://162.105.81.212/JudgeOnline/problem?id=3370 * 容斥原理: # hdu1695 GCD // 求gcd(x,y)=k 的個(gè)數(shù),相當(dāng)于求gcd(x/k,y/k)=1 的個(gè)數(shù),其中x/k 在[a/k,b/k],y/k 在[c/k,d/k] 之間。所 以就是求在一定區(qū)間內(nèi),x ,y 互質(zhì)的對(duì)數(shù)。假設(shè)b<d, (此處b,d 已除k )那么對(duì)于<=b, 直接用歐拉函數(shù)就可以了,對(duì)于[b+1,d] 之 間的數(shù),對(duì)于每一個(gè)分解質(zhì)因數(shù),然后利用容斥原理,求出[1,b ]之間和這個(gè)數(shù)互質(zhì)的個(gè)數(shù)。注意最后答案可能超過int ,用I64d 輸出。 http://acm.hdu.edu.cn/showproblem.php?pid=1695 # hdu2461 Rectangles // 對(duì)稱情況下才能使用懶標(biāo)記,而且覆蓋的標(biāo)號(hào)不向下傳。另外在pku3695 上同樣的題目由于時(shí)限很緊,所以可以對(duì)坐標(biāo)進(jìn)行離散化。log1000 和 log40 還是有差別的。 http://acm.hdu.edu.cn/showproblem.php?pid=2461 10. 找規(guī)律,推公式 這類題目的設(shè)計(jì)一般都非常巧妙,真的是很難想出來,但只要找到規(guī)律或推出公式,就不是很難了。我很多都是在參考別人思路的情況下做的,能自己想出來真的很不容易。 * 個(gè)人感覺都挺不錯(cuò)的: # pku3372 Candy Distribution// 找規(guī)律。。。其實(shí)可以進(jìn)行分析的。 http://162.105.81.212/JudgeOnline/problem?id=3372 # pku3244 Difference between Triplets// 這道題目要用到一個(gè)很巧妙的轉(zhuǎn)化,把比較轉(zhuǎn)化為絕對(duì)值的計(jì)算。因?yàn)閙ax(a,b,c)-min(a,b,c)=(|a- b|+|a-c|+|b-c|)/2, 然后剩下的就容易做了。 http://162.105.81.212/JudgeOnline/problem?id=3244 pku1809 Regetni http://162.105.81.212/JudgeOnline/problem?id=1809 pku1831 不定方程組 http://162.105.81.212/JudgeOnline/problem?id=1831 # pku1737 Connected Graph //f[n] 為n 個(gè)點(diǎn)的聯(lián)通數(shù),那么f[n]=2^(c[n][2])-sigma(f[k]*c[i-1][k-1]*2^(c[n-k][2])) http://162.105.81.212/JudgeOnline/problem?id=1737 # pku2480 Longge's problem//sigma(gcd(i,n))=sigma(d|n && d*[gcd(i,n)==d]), 枚舉所有n 的約數(shù)d ,然后對(duì)于n/d ,找出所有和n/d 互質(zhì)的數(shù)的個(gè)數(shù)就是gcd(i,n)==d 的個(gè)數(shù),從而用歐拉 函數(shù)解決。 http://162.105.81.212/JudgeOnline/problem?id=2480 pku1792 Hexagonal Routes http://acm.pku.edu.cn/JudgeOnline/problem?id=1792 11. 排列組合,區(qū)間計(jì)數(shù),計(jì)數(shù)序列 這些題目可能需要一些組合數(shù)學(xué)知識(shí),基本上高中的知識(shí)就夠了。區(qū)間計(jì)數(shù)問題一般不難,但寫的時(shí)候需要仔細(xì)一些,各種情況要考慮到位。至于像卡特蘭數(shù),差分序列,斯特靈數(shù)··· 都還挺有意思,可以去看看《組合數(shù)學(xué)》。 * 簡單題: pku1850 Code http://162.105.81.212/JudgeOnline/problem?id=1850 pku1150 The Last Non-zero Digit http://162.105.81.212/JudgeOnline/problem?id=1150 pku1715 Hexadecimal Numbers http://162.105.81.212/JudgeOnline/problem?id=1715 pku2282 The Counting Problem http://162.105.81.212/JudgeOnline/problem?id=2282 pku3286 How many 0's? http://162.105.81.212/JudgeOnline/problem?id=3286 * 推薦: pku3252 Round Numbers http://162.105.81.212/JudgeOnline/problem?id=3252 * 計(jì)數(shù)序列: pku1430 Binary Stirling Numbers http://162.105.81.212/JudgeOnline/problem?id=1430 pku2515 Birthday Cake http://acm.pku.edu.cn/JudgeOnline/problem?id=2515 pku1707 Sum of powers http://acm.pku.edu.cn/JudgeOnline/problem?id=1707 12. 二分法 二分的思想還是很重要的,這里就簡單推薦幾個(gè)純粹的二分題。 * 簡單: pku3273 Monthly Expense http://162.105.81.212/JudgeOnline/problem?id=3273 pku3258 River Hopscotch http://162.105.81.212/JudgeOnline/problem?id=3258 pku1905 Expanding Rods http://162.105.81.212/JudgeOnline/problem?id=1905 pku3122 Pie http://162.105.81.212/JudgeOnline/problem?id=3122 * 推薦: # pku1845 Sumdiv // 令a=p1^m1 * p2^m2 * ... * pk^mk, 那么由于因數(shù)和是一個(gè)積性函數(shù), 所以 f(a)=f(p1^m1)*f(p2^m2)*.. ; f(x^t)=1+x+x^2+..+x^t=(1-x^(t+1))/(1-x); 由于mod 某個(gè)數(shù),所以可以1/(1-x) 可以用同余數(shù)解決。不過注意如果MOD | x-1, 那么 f(x^t)=t+1 特殊處理一下。 http://acm.pku.edu.cn/JudgeOnline/problem?id=1845 13. 穩(wěn)定婚姻問題 無意中接觸到這個(gè)算法,還蠻有意思的,《組合數(shù)學(xué)》中有詳細(xì)的介紹。 pku3487 The Stable Marriage Problem http://acm.pku.edu.cn/JudgeOnline/problem?id=3487 zoj1576 Marriage is Stable http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1576 14. 數(shù)位類統(tǒng)計(jì)問題 在航點(diǎn)月賽中第一次接觸到這類問題,scau 大牛little 龍推薦我看了一篇論文,09 年劉聰?shù)摹稖\談數(shù)位類統(tǒng)計(jì)問題》,這篇論文相當(dāng)精彩,也相當(dāng)詳 細(xì),每道題都有詳細(xì)的分析和作者的參考代碼。所以我也沒什么可說的了,這些題的代碼我博客里也就不貼了,大家直接去看論文吧。 簡單: ural1057 Amount of degrees http://acm.timus.ru/problem.aspx?space=1&num=1057 spoj1182 Sorted bit squence https://www.spoj.pl/problems/SORTBIT/ hdu3271 SNIBB http://acm.hdu.edu.cn/showproblem.php?pid=3271 較難: spoj2319 Sequence https://www.spoj.pl/problems/BIGSEQ/ sgu390 Tickets http://acm.sgu.ru/problem.php?contest=0&problem=390 以上分類的題目在我的博客里都可以找到詳細(xì)的解題報(bào)告和參考代碼,由于比較麻煩就沒加鏈接,需要的可以用我的站內(nèi)搜索找到。 本小結(jié)會(huì)不斷更新,轉(zhuǎn)載請(qǐng)注明出處。 歐拉函數(shù)。 # pku 3696 The Luckiest number //(10^n-1+..+10+1)=(10^n-1)/9, 歐拉函數(shù),離散對(duì)數(shù),注意溢出處理(相乘時(shí)變?yōu)閍T+b )。 http://acm.pku.edu.cn/JudgeOnline/problem?id=3696 樹狀數(shù)組 # hdu 3333 先求出每個(gè)位置后面和它一樣的最近的那個(gè)數(shù)的位置next[i] ,然后用樹狀數(shù)組記錄不重復(fù)的前n 個(gè)數(shù)的和,接著對(duì)詢 問區(qū)間排序,從左到右做,記left 為在當(dāng)前區(qū)間左邊的那些數(shù),通過樹狀數(shù)組,將left 到next[left]-1 之間的所有的數(shù)都減去 val[left] ,然后就可以直接像sum[i]-sum[j] 那樣方便的求出區(qū)間里面沒有重復(fù)的數(shù)的和。 http://acm.hdu.edu.cn/showproblem.php?pid=3333 # pku 3222 // 樹的dfs 和分治思想 解題報(bào)告見此:http://acm.pku.edu.cn/JudgeOnline /showmessage?message_id=129459 本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/hncqp/archive/2010/06/02/5643380.aspx?
?
pku 1150 The Last Non-zero Digit 和計(jì)算排列數(shù)末尾有多少個(gè)零有些類似,把2,5因子都拿出來,剩下的數(shù)的最后一個(gè)數(shù)字只有1,3,7,9。只有各位上的數(shù)字才會(huì)影響最后一個(gè)非零數(shù)字。統(tǒng)計(jì)可以用遞歸來統(tǒng)計(jì),求出1~n中因子2,5的個(gè)數(shù),以及3,7,9結(jié)尾的數(shù)和去掉2,5后新的到的數(shù)中3,7,9結(jié)尾的數(shù)。結(jié)果就是 2^(dig[2]-dig[5])*3^(dig[3])*7^(dig[7])*9^(dig[9]) mod 10 ,用快速冪乘來算。 pku 1186 方程的解數(shù) (hash,枚舉) 題目給出最多有6個(gè)未知數(shù),未知數(shù)的取值在[1,150]之間,直接枚舉時(shí)間復(fù)雜度是150^6,這個(gè)時(shí)間不能接受。枚舉前一半的未知數(shù)可以到達(dá)的值(用hash表保存),再枚舉后一半,這樣可以加快枚舉。 pku 1285 Combinations, Once Again(有重復(fù)的組合,dp) 對(duì)輸入的數(shù)先統(tǒng)計(jì)一下,每個(gè)數(shù)出現(xiàn)的次數(shù)。如果每次重復(fù)的數(shù),輸出c[n][m]就可以。有重復(fù)數(shù)時(shí),要考慮到取相同元素的情況,那么ans=sigma c[x][i]*z[s][m-i] 0<i<=m z[i][j]表示從1到第i堆中拿j個(gè),把重復(fù)的數(shù)字表示成a[1],a[2]..,a[s],s個(gè)數(shù)出現(xiàn)重復(fù)。注意幾個(gè)邊界條件,c[0][0]=1,z[1][0...a[1]]=1,z[i][1]=i 2<=i<=s。 pku 1430 Binary Stirling Numbers (stirling 數(shù)) 在wiki上找到公式,原來mod 2時(shí)和組合數(shù)有關(guān)系。原文如下: Using a Sierpiński triangle, it's easy to show that the parity of a Stirling number of the second kind is equal to the parity of a related binomial coefficient: Or directly, let two sets contain positions of 1's in binary representations of results of respective expressions: then mimic a bitwise AND operation by intersecting these two sets: to obtain the parity of a Stirling number of the second kind in O(1) time. pku 1465 Multiple(BFS,整除) 給幾個(gè)一些數(shù)學(xué),找出由這些數(shù)字組成的數(shù)中最小的一個(gè)能整除n的數(shù)。0<n<4999,把所有的數(shù)從小到大開始,在入隊(duì)列前看下該數(shù)所到達(dá)的余數(shù)是否被前面小的數(shù)求到過,若否才入隊(duì)。這樣搜索的空間就只有n的剩余系了。 pku 1715 Hexadecimal Numbers(組合) 不重復(fù)的組合問題,知道第幾個(gè)找出這個(gè)組合。從最高位開始,一位一位確定dfs下去,每次都要保證已確定的位的所有組合不少于題目給出的序號(hào)。最多八層。 pku 1737 Connected Graph(組合數(shù)學(xué),高精度) 題目是求n個(gè)點(diǎn)用邊鏈接,形成聯(lián)通圖的方案總算。滿足聯(lián)通的邊數(shù)在[n-1,n(n-1)/2],自己一開始想分邊數(shù)情況考慮,發(fā)現(xiàn)情況比較復(fù)雜,推出一個(gè)像整數(shù)拆分的方法。還來在網(wǎng)上看到一種更好的解法。公式是f[n]=f[k]*f[n-k]*c[n-2][k-1]*((2^k)-1) (c[n-2][k]表示組合數(shù),1<=k<n);考慮一個(gè)完整的聯(lián)通圖,可以標(biāo)記兩個(gè)點(diǎn)1,2。將點(diǎn)1,點(diǎn)2分別劃分在兩個(gè)子聯(lián)通圖中分別為g1,g2。在g1中最少要有一個(gè)點(diǎn)與g2中的點(diǎn)2鏈接。這樣的方式共2^k-1中,而g1總有c[n-2][k-1]個(gè)。將他們乘在一起就有了上面的式子。另外這題要用到高精度,終于用java寫了個(gè)高精度的題感覺真方便。 pku 1845 Sumdiv(積性函數(shù),因子和) 求a^b的因子和(包括1和a^b),由于因子和是積性函數(shù)。所以f(a^b)=f(p1^t1)*f(p2^t2)...*f(pn^tn),對(duì)于f(p^t)的情況: f(p^t)=1+p+p^2+...+p^t=(p^(t+1)-1)/p-1。題目還要求mod 9901,這雖然是個(gè)素?cái)?shù),但是數(shù)據(jù)中出現(xiàn)了p-1 = 0 (mod 9901)的情況,這時(shí)f(p^t)=t+1 (mod 9901),要特殊處理下,其余用快速冪乘。 pku 1809 Regetni(奇偶,組合) 根據(jù) 這個(gè)公式計(jì)算 A=|x1y2 - y1x2 + x2y3 - y2x3 + x3y1 - y3x1|/2 三角形的面積是否為整數(shù)。這題不要去算具體的面積,答案和所選點(diǎn)的奇偶性有關(guān),點(diǎn)的只有4種類型,(0,0),(1,1),(1,0),(0,1)。把這4類點(diǎn)的所有組合情況(共20種)代入公式 發(fā)現(xiàn),當(dāng)最少有兩個(gè)點(diǎn)屬于同一類型是面積才是整數(shù)。那么只有統(tǒng)計(jì)出所有點(diǎn)的組合情況就可以得出答案了。點(diǎn)的組合情況 {0,1,2},{0,1,3},{0,2,3},{1,2,3},{0,1,1},{0,2,2},{0,3,3},{1,0,0},{1,2,2},{1,3,3},{2,0,0},{2,1,1},{2,3,3}, {3,0,0},{3,1,1},{3,2,2},{0,0,0},{1,1,1},{2,2,2},{3,3,3} 這些是合理的組合。 pku 1831 不定方程組(構(gòu)造解) 這個(gè)題目很有意思,說a1+a2..an=s,1/a1+1/a2....+1/an=1;求一組這樣的解。 為了找S的一組解,可以把S變小,來得到S的解。兩種變小的方法:p/2+1/2=1 ,p*2+2=S;或p/2+1/3+1/6=1,p*2+9=S;選這兩種方式是為了使奇數(shù),偶數(shù)都有變小的方法。更重要的是當(dāng)S一定大時(shí),一定會(huì)有解。證明可以通過歸納來證得。所以事先保留一些小的S的解。大的S通過遞歸的構(gòu)造出解來。 pku 2142 The Balance(不定方程) 不定方程題,解a*x+b*y=d 。先求a*x0+b*y0=k。a/=k,b/=k,d/=k; 得到等價(jià)方程a'*x+b'*y=d',一般解為x=x0-b'*t,y=y0+a't;其中t為任意整數(shù)。 pku 2154 Color(波利亞定理,著色問題) 一個(gè)經(jīng)典的著色問題,題目描述的是一個(gè)正常的旋轉(zhuǎn)群,它的輪換指標(biāo)為1/n*sigma(euler(d)*(xd)^(n/d)) ,其中d為n的所有因子。有了這個(gè)生成函數(shù)就可以容的計(jì)算n種顏色,在正n邊形上著色的不同方案數(shù)了。 pku 3352 In Danger(約瑟夫環(huán)) 簡單題,和具體數(shù)學(xué)第一章提到的問題是一樣的,講每數(shù)2去掉一人,求勝利人的編號(hào)。公式是 f(n)=f(n/2)*2-1 n=2*k f(n)=f(n-1/2)*2+1 n=2*k+1 pku 2282 The Counting Problem(計(jì)數(shù)統(tǒng)計(jì)) 一個(gè)計(jì)算問題,統(tǒng)計(jì)a,b之間0-9這些數(shù)字出現(xiàn)的次數(shù)。可以分別計(jì)算f(b),f(a-1)的大小,其中 a<b f(n)表示1到n數(shù)字出現(xiàn)的統(tǒng)計(jì)。對(duì)于f(n) ,可以按位計(jì)算,從個(gè)位到n的最高位,分別計(jì)算0-9的個(gè)數(shù),0的計(jì)算有些特殊,因?yàn)?不能是一個(gè)數(shù)字的最高位 while(a>=times) { len=a/(times*10); for(i=0;i<10;i++)aa[i]+=len*times; if(len>0)aa[0]-=times; tmp=(a/times)%10; if(a>=times*10)start=0;else start=1; for(i=start;i<tmp;i++)aa[i]+=times; aa[tmp]+=a%times+1; times*=10; } pku 2429 gcd lcm Inverse 大數(shù)分解,要分解的數(shù)很大,到了2^63,普通的素?cái)?shù)表方法行不通,要使用Pollard分解,分解lcm/gcd。需要注意的是會(huì)出現(xiàn)lcm==gcd的情況。 pku 2769 Reduced ID Numbers(同余) 給出n個(gè)數(shù),找一個(gè)數(shù)p,使得沒個(gè)數(shù)mod p的值不相等。即n個(gè)數(shù)mod p不同余。先求出任意兩個(gè)數(shù)的差(要正的),找個(gè)最小的數(shù),使其不是前面求的差的約數(shù)。 pku 2891 Strange Way to Express Integers(解模線性方程組) 這題是解個(gè)同余方程組,既解x= ai (mod bi) ,題目沒有保證bi之間兩兩互素,所以中國剩余定理,在這里沒用。可以通過先求 兩個(gè)方程的解,這樣就將兩個(gè)方程和并成一個(gè),直達(dá)只剩下一個(gè)為止就可以的到答案了。在合并的過程中有不能合并的情況出現(xiàn)就 說明整個(gè)方程組沒有解。c=a1 (mod b1),c=a2 (mod b2) c=a1+b1*x, a1+b1*x= a2 (mod b2),用擴(kuò)展歐幾里德求出c。兩個(gè)方程就 可以用 c'= c (mod lcm(b1,b2))表示。 hdu 1792 A New Change Problem 題是說:給兩個(gè)互質(zhì)的數(shù),要求出兩個(gè)數(shù)所不能組合出的正整數(shù)。在較大數(shù)的每一個(gè)等價(jià)類中找出最小的一數(shù),它是較小數(shù)的倍數(shù),那么在這個(gè)等價(jià)類中小于這個(gè)數(shù)的都是不能被表示出來的。最大的一個(gè)不能被表示出來的數(shù)是(n-1)*m-n 其中n>m,由于n有n個(gè)等價(jià)類,一個(gè)類包含不可表示出的數(shù)是m-1,總是是(n-1)*(m-1)/2 pku 2888 Magic Bracelet(帶約束的著色問題) 這題還是要用到波利亞定理,唯一的不同是計(jì)算矩陣的冪模,再求矩陣的跡。具體的推導(dǎo)就不知道是怎么來的。關(guān)于矩陣是指允許相鄰的兩種顏色之間有邊,這就形成了個(gè)無向圖。矩陣的n冪模,和快速冪乘的原理是一樣的。 pku 2917 Diophantus of Alexandria(不定方程,因數(shù)分解) 模擬下后發(fā)現(xiàn),滿足1/x+1/y=1/z的x,y是z的約數(shù),并且x,y互素。統(tǒng)計(jì)x,y的對(duì)數(shù)再加1(x=z,y=z是特殊的一對(duì))。 后來看到討論里有公式,(x-z)(y-z)=z^2,計(jì)算小于z,并是z^2的約數(shù)就是答案了。 pku2992 Divisors (組合數(shù),因子個(gè)數(shù)) 計(jì)算C(n,k)的因子個(gè)數(shù),由于n很小,最大為431,所以可以把1~431的所有數(shù)先因式分解,再來統(tǒng)計(jì)n*(n-1)...(n-k+1)/k*(k-1)...1的素因子個(gè)數(shù)。 pku 3370 Halloween treats(鴿巢原理) 給定m個(gè)整數(shù)a1,a2,a3,..,am,存在整數(shù)k和l,0<=k<l<=m,使得ak+1 + ak+2 + ... +al能夠被m整除。也就是說存在連續(xù)的一段al,...am,之和被m整除。考慮從a1...ai的和si,必定有si%m==0 或 si = sj (mod m),這種情況下取ai+1...aj,這段之和會(huì)是m的倍數(shù)。 pku 3128 Leonardo's Notebook(置換) 題目意思是:一個(gè)置換是否可以由另一個(gè)置換的平方得來的。一個(gè)置換的平方,原來偶數(shù)長的循環(huán)會(huì)被分裂成兩段長度相等的循環(huán),而奇數(shù)長的循環(huán)不會(huì)被分裂。題目只是問是否存在,所以只要看所給置換中偶數(shù)長的循環(huán)是否成對(duì),否則就不能由一個(gè)置換的平方得來。 pku 3244 Difference between Triplets(公式變形) 很巧妙的公式變形,可惜不自己想出來的。首先計(jì)算max(a,b,c)-min(a,b,c)=(|a-b|+|b-c|+|a-c|)/2,有了這個(gè)公式就可以把比較變成加。那么 D(Ta, Tb) = max {Ia ? Ib, Ja ? Jb, Ka ? Kb} ? min {Ia ? Ib, Ja ? Jb, Ka ? Kb} =(|Ia-Ib-Ja+Jb|+|Ja-Jb-Ka+Kb|+|Ia-Ib-Ka+Kb|)/2 令I(lǐng)a-Ja=Wa,Ja-Ka=Ua,Ia-Ka=Ha; =(|Wa-Wb|+|Ua-Ub|+|Ha-Hb|) 將讀入的數(shù)據(jù)轉(zhuǎn)化W,U,H三個(gè)數(shù)組,分別計(jì)算這三個(gè)數(shù)組任意兩個(gè)元素的差的絕對(duì)值之和。這里要用小于O(n^2)的算法,把數(shù)組排序后可以拿掉絕對(duì)值,統(tǒng)計(jì)每個(gè)元素作為減數(shù)出現(xiàn)的次數(shù)。 pku 3324 Lucas-Lehmer Test(模運(yùn)算) 首先要用到高精度,用java很方便。在計(jì)算模的時(shí)候,由于是mod 2^p-1,可以用移位來加速。 a=r (mod 2^p-1) => a=k*(2^p-1)+r,先算個(gè)打概的k,得到的r>2^p-1,繼續(xù)減2^p-1。這樣比直接模運(yùn)算要快。 pku 3372 Candy Distribution(二次剩余系) 根據(jù)題目的意思可以得到方程 1+n(n+1)/2 =a (mod N),顯然這是一個(gè)二次模方程。要看N的二次完全剩余系是否都有解。 結(jié)論是N要是2^x,x>=0,結(jié)論的證明還不知道。 pku 3516 Hide That Number(高精度) 題目是說給出一個(gè)數(shù)y,找到 x*11= y (mod 10^length(y)),如果y很小,直接求出逆來就能得到答案了,可是y很大,構(gòu)造的方法沒有想到,最后還是暴力做的。每次在y的前面加個(gè)數(shù)學(xué)(1,2..9),或是加上10這兩個(gè)數(shù)字,看新得到的數(shù)字是11的倍數(shù)。若是,就可以得到答案了。由于y很大,普通的高精度會(huì)超時(shí),要增加進(jìn)制。 pku 3847 The Stable Marriage Problem(穩(wěn)定婚姻) 穩(wěn)定婚姻問題。用到了延遲認(rèn)可算法。用最優(yōu)方提出匹配,而被匹配者,不會(huì)立即接受,而是在提出要求者的集合中去掉,比當(dāng)前著差的元素,知道沒有人提出匹配,被匹配者才確定下匹配關(guān)系。值得一提的是,穩(wěn)定婚姻的存在性不能被保證。 pku 3358 Period of an Infinite Binary Expansion(數(shù)論,歐拉定理) 這個(gè)題目是求兩個(gè)數(shù)相除p/q,結(jié)果的小數(shù)部分用二進(jìn)制表示,當(dāng)q不是2的冪時(shí),這個(gè)二進(jìn)制是個(gè)無線循環(huán)的01串。 下面是個(gè)模擬小數(shù)部分按二進(jìn)制表示,可以發(fā)現(xiàn)二進(jìn)制傳一定會(huì)有循環(huán),因?yàn)閜=p%q,既然是循環(huán),又是模運(yùn)行,這和p模q的階有關(guān),p%q的階一定是q的歐拉函數(shù)的因子。這樣轉(zhuǎn)換成一個(gè)模方程:p*2^n = x(mod q),當(dāng)然p和q要互素,2和q互素。在計(jì)算前把q中的2去掉,p,q同除最大公因數(shù)。然后從1開始枚舉,所以的歐拉數(shù)的因子。 #include <stdio.h> #define pr printf int main() { int i,p,q; while(scanf("%d%d",&p,&q)==2){ pr("0."); for(i=1;i<=100;i++) { p*=2; pr("%d",p/q); p=p%q; } pr("/n"); } } /* 5 192 0.000001101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010 */ pku 3590 The shuffle Problem(置換,數(shù)的分解) 題目求一個(gè)排列通過置換之后再回到原來的那個(gè)排列,對(duì)于給定的排列求出一個(gè)滿足置換次數(shù)最多的一個(gè)置換。一個(gè)置換可以分解成多個(gè)循環(huán),每次置換元素之和在同一個(gè)循環(huán)中的元素發(fā)生轉(zhuǎn)換,同一個(gè)循環(huán)中循環(huán)節(jié)是元素的個(gè)數(shù),所以這個(gè)題是要把一個(gè)數(shù)分成多個(gè)數(shù)的和,讓這些數(shù)的最小公倍數(shù)最大。要保證lcd最大應(yīng)該分解出來的每個(gè)數(shù)兩兩互素。由于數(shù)比較小,23是能最大的素?cái)?shù),所以直接枚舉可以滿足。 pku 3641 Pseudoprime numbers(費(fèi)馬定理,快速冪乘) 簡單題,先看p是否是素?cái)?shù),若是直接輸出no。否則計(jì)算(a^p)%p,若結(jié)果是a輸出yes,否則輸出no。 2008哈爾濱賽區(qū)網(wǎng)絡(luò)預(yù)選1007 The Luckiest number(歐拉定理運(yùn)用) 題目說要找個(gè)數(shù)t,它的數(shù)字全是8,對(duì)于給定的n,t要是n的整數(shù)倍,求最小的t。 賽后才發(fā)現(xiàn)這題并不拿,可能是我太菜了。這題問題可以轉(zhuǎn)換成8*(10^x-1)/9 = 0 (mod n ),這樣就可以看出還有因子5和16的n是沒有解的。并且n是偶數(shù)時(shí),其解是n除去2因子的解。最后就是求解 10^x = 1 (mod 9*n) n是一個(gè)奇數(shù),所以(10,n)=1,這樣就可以根據(jù)歐拉定理 ,滿足等式的解只能是 euler(9*n)的因子。枚舉歐拉數(shù)的因子,最小的那個(gè)就是要求的解。由于n可以到2000000000,快速冪乘要支持64位運(yùn)算。 2008 成都網(wǎng)絡(luò)預(yù)選 1005 Farey Sequence Again(Farey Sequence ,構(gòu)造) 與其說是數(shù)學(xué)題,還不如說是個(gè)模擬題。Farey Sequence序列規(guī)律性很強(qiáng),暴力模擬后發(fā)現(xiàn)有很多規(guī)律。要用到的一個(gè)性質(zhì)是 Fn中連續(xù)的3個(gè)元素,a1/b1 ,a2/b2,a3/b3。若a1+a3<n 并且 b1+b3<=n ,則 a2=a1+a3,b2=b1+b3。這個(gè)性質(zhì)很有用,根據(jù)它可以推出序列中前n項(xiàng)的分子不超過3,而且在構(gòu)造的時(shí)候也要用到這個(gè)性質(zhì),找個(gè)第一個(gè)分母是2和3的元素的位置,都可以通過觀察看出規(guī)律。序列就分成了3段,第一段分子只有1,第二段分子有1和2,而且是2,1,2,1,2,。。。這樣循環(huán)的。第三段有1,2,3,也會(huì)出現(xiàn)循環(huán),或是3,1,3,2 或是3,2,3,1這樣的循環(huán)結(jié)。所以的規(guī)律都可以在模擬的序列中看出。只有3為分子時(shí)看不出規(guī)律,但是這樣的元素左右兩個(gè)一定是分子為1和2的兩個(gè)元素,根據(jù)性質(zhì),知道3周圍的兩個(gè)元素的分母,就可以得出分子為3的元素的分母 2008 哈爾濱現(xiàn)場賽 Simple Addition Expression hdu2451 通過讀題發(fā)現(xiàn)滿足要求的數(shù)字,最高位由1,2,3組成,最低位由0,1,2組成,中間由0,1,2,3組成。計(jì)算小于n的數(shù)有多少個(gè)這種數(shù)就是答案。 2008 哈爾濱現(xiàn)場賽 K-dimension number hdu2447 讀題后發(fā)現(xiàn)K要么是p,要么是p^2 (p為素?cái)?shù)),且p<=97,K維數(shù)n的情況只有三種。 一,當(dāng)k為p時(shí),n=(p')^(p-1) 二,當(dāng)k為p^2時(shí),n=(p1')^(p-1)*(p2')^(p-1)或n=(p1')^(p^2-1) 三,當(dāng)k為1是,n=1。 zoj 2562 More Divisors(反素?cái)?shù),dp) 反素?cái)?shù)是指在不大于n數(shù)中含有最多約數(shù),值最小的一個(gè),比如2,4,6。。都是反素?cái)?shù)。題目要求在小于10^16中的反素?cái)?shù)。 由于反素?cái)?shù)要求約數(shù)盡量多,所以素因子個(gè)數(shù)要盡量少,而指數(shù)要盡量大,這樣一個(gè)數(shù)成為反素?cái)?shù)的機(jī)會(huì)就大。所以只要考慮前13個(gè)素?cái)?shù)所能組成的數(shù)就可以。轉(zhuǎn)移方程 f[i][j]= min{f[i-1][j/(k+1)]*p(i)^k} f[i][j] 表示i個(gè)素?cái)?shù),有j個(gè)約數(shù)的最小值。p(i)表示第i個(gè)素?cái)?shù),j%(k+1)==0 要注意的地方: j不超過50000。?
轉(zhuǎn)載于:https://www.cnblogs.com/Fy1999/p/9780395.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: Java开发小技巧(五):HttpCli
- 下一篇: 3-2.6==0.4