原创 POJ 2369 Permutations(置換)

題意:求一個置換的最小循環節。 思路:各個自循環長的LCM。 #include <algorithm> #include <iostream> #include <sstream> #include <cstring> #include

原创 POJ 1027 Cipher(置換)

題意:第i個移動到a[i]。問k次之後的字符串。 思路:置換求循環節。 #include <algorithm> #include <iostream> #include <sstream> #include <cstring> #in

原创 UVa 10459 The Tree Root(樹)

題意:以同一棵樹以i爲根得到不同的最大深度。求最大深度最小的點和最大的點集。 思路:任取一點dfs一遍找到其最遠點,再從最遠點dfs一遍找到另一個最遠點。這樣所有點的最遠距離一定是到這兩個點之一。再反過來跑一遍dfs更新所有點的dis

原创 UVa 10560 Minimum Weight

題意:砝碼稱重1~N,問最少要幾個砝碼。 思路:很容易得到b[i] = sum[i-1] * 2 + 1。因爲sum[i-1]的都是已表示完備的,因此下一個需要多出sum[i-1] + 1。 #include <algorithm> #i

原创 UVa 10651 Pebble Solitaire(狀壓DP)

題意:110->001,011->100。問最後最多少幾個1。 思路:狀壓DP水題。 #include <algorithm> #include <iostream> #include <sstream> #include <cstrin

原创 HDU 2196 Computer

題意:問每個點到任意點的最遠距離爲多少。 思路:任取一點dfs一遍找到其最遠點,再從最遠點dfs一遍找到另一個最遠點。這樣所有點的最遠距離一定是到這兩個點之一。再反過來跑一遍dfs更新所有點的dist。 #include <algorit

原创 UVALive 4683 Find The Number(容斥原理)

題意:k大小的元素集合,得到一個遞增數列,這個數列中的數能且僅能被這個元素集合的一個元素整除。求第n大的數。 思路:與一般的容斥不同,這裏的能整除1個元素的算了1次,能整除2個的算了2次,能整除3個的算了3次......奇加偶減。 算的過

原创 HDU 2841 Visible Trees(歐拉+容斥)

題意:給個n*m網格,求從(0, 0)點可看到的點數。 思路:顯然是求x與y互質的(x, y)個數。設n < m,則對1到n的數,ans += phi[i],phi[i]爲i的歐拉值,然後ans乘2。對[n+1, m],顯然要求[1, n

原创 UVa 11021 Tribles(概率DP)

題意:k個蟲,活一天,死後生蟲。生i只(0 <= i < n)概率p[i]。求m天死的概率。 思路:事件相互獨立。全概率公式。 #include <algorithm> #include <iostream> #include <sstr

原创 Codeforces Round #334 (Div. 2) D. Modular Arithmetic(置換)

題意:給出方程 f(kx%p)=kf(x)%p ,問在集合A->B上不同的映射函數f有幾種,其中A=B={0,1,2..p-1},p爲素數(除了2),k爲小於p的一個常數。 思路:f(kx1%p) = kf(x0)%p, f(kx2%p)

原创 UVa 10493 Cats, with or without Hats

題意:一喵可帶一帽,一帽可裝n喵。m只喵沒帶帽子,有且只有1只喵不在其它喵帶的帽子裏。問有幾喵。 思路:不在其它喵帽子裏的那個喵是樹根。由此形成一棵樹,每隻喵要麼無子節點,要麼有n個子節點。顯然總數y爲帽子的裏喵的和加上不在帽子裏的喵。設

原创 POJ 1721 CARDS(置換)

題意:i位置的每次換成x[i]位置的。k次後得到輸入的序列。問初始序列爲咩。 思路:置換有循環節。2 ^ t = 1 (mod n)。找到t即可。f[i][N]表示第i次變換後的序列。 #include <algorithm> #incl

原创 Codeforces Round #334 (Div. 2) B. More Cowbell

題意:裝盒子。一個盒子最多裝倆。k個相同容量的盒子,求最小容量。 思路:顯然用的盒子越多最小容量越小。所以若n <= k,就用n個盒子;否則就儘量多的一個盒子裝一個,且先挑大的裝。這樣剩下的就是兩個裝一個的。每次挑最大的和最小的裝一個,這

原创 POJ 2773 Happy 2006(容斥原理)

題意:給n和k,求與n互素的第k個數。 思路:二分+容斥原理。 #include <algorithm> #include <iostream> #include <sstream> #include <cstring> #include

原创 POJ 3128 Leonardo's Notebook(置換)

題意:給定置換B,求是否存在置換A使得A^2 = B。 思路:對一個長度爲n的循環。n爲奇數,則平方後仍爲奇數。n爲偶數,則分裂成兩個n / 2的循環。所以一個置換若要由平方得到,則包含的偶數循環個數一定爲偶數個。 #include <