2*k 我的構成一個環 前k個好人 後k個壞人, 要求以m個報數,前k個殺死的全是壞人。算法
首先嚐試求得這樣一個m,知足條件。ide
k=1的時候, x o m = 2 則先殺死壞人idea
k=2的時候, x x o o m= 7spa
如何解決k=2時候狀況?3d
假設首先殺死第3我的 則 m = 4*a+3 ip
接着殺死第4我的 則 m = 3*b + 1rem
知足上面兩個條件的m如何求?get
4*a+3 = 3*b+1 4*a = 3*b-2 = 3*c+1it
這涉及到孫子定理, 擴展歐幾里德算法, Bézout's identity 等概念io
http://en.wikipedia.org/wiki/Chinese_Remainder_Theorem
http://en.wikipedia.org/wiki/Method_of_successive_substitution
http://en.wikipedia.org/wiki/Modular_multiplicative_inverse
http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm
http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity
由於4*a = 3*c+1 且 4,3互質, (4*1)%3 == 1
因此4的mod運算的逆是 1, 4%3 == 1 , 4*a%3 == 1 因此 a%3 == 1
因此 a = 3*d+1
因此 4a +3 = 4*(3*d+1) +3 = 12d+7
因此m = 7 便可知足條件。
上面假設先殺死第3我的,若是先殺死第4我的,則有
m = 4*a + 4 = 4*b (b>=1)
m = 3*c + 3 = 3*d (d >= 1)
因此 4b = 3d
b%3 == 0
m = 4*(3e) = 12e
m最小是 12
因此m最優解是 7