題目:
有 n 個硬幣,一開始全部正面朝上,每次可以翻轉 k 個硬幣( k 小於 n ),那麼至少要 p 次翻轉,才能讓所有硬幣反面朝上,求 p 的值。如果不能成功翻轉則輸出-1
input
輸入2個數:n,k (1 <= n <= 10^9, 1 <= k <= 10^9)。output
輸出翻轉次數的最小值。input示例如果不能成功翻轉則輸出-1
6 5output示例
6在豆瓣的乙個帖子裡看到曾加老師的思路,就不把自己的拿出來丟人現眼了- -
附上按照這個思路寫出來的**:
#include #include using namespace std;
int main()
else
}else
else if( (k%2)&&k>(n/2) && k<=(n-1) )
else if( (k%2==0)&& k<=(n/2) )
else if( (k%2)&& k<=(n/2) )}}
return 0;
}
然而我最開始想的和另一種想法一樣,即:
求不定方程
xy=(2y+1)n
的最小正整數解。由簡單的初等數論知識,這個方程有整數解的必要條件是k和2n的最大公約數也是n的約數,即不允許k是偶數而n是奇數的情況。在有解的情況下,這個方程可以用擴充套件歐幾里得演算法來解。
之後@dogther 發現了乙個bug,即:
翻轉的次數不一定是n的倍數;
舉個例子 n=7 k=3 的時候,1-7編號 ;
第一次翻轉1-3,第二次翻轉3-6;第三次翻轉3和6和7即可;
於是不能翻轉n的奇數倍來解決;
暫時我就卡在這裡了,想到也許能通過二分圖來實現,試一試,什麼時候能寫了再更
演算法馬拉松24
n 1個點的多邊形。給外圈的邊標記上1 n,裡圈的邊也標記上1 n,使得對於乙個外圈相鄰點與中間點構成的三角形的邊權之和都相等。n le 10 6 顯然每個三角形權值和為 frac 一開始簡化成n個數排乙個環,相鄰兩個數的和不相等並且有上下界,然後並不好做 構造了一下n 5發現外圈正好1.5,內圈1...
演算法馬拉松8 差和問題
差和問題 有乙個集合s,初始狀態下有n個元素,對他進行如下操作 1 向s裡面新增乙個值為v的元素。輸入格式為1v 2 向s裡面刪除乙個值為v的元素。輸入格式為2v 3 詢問s裡面的元素兩兩之差絕對值之和。輸入格式為3 對於樣例,操作3,1 2 1 3 2 3 4 操作1 4之後,集合中的數字為1 2...
演算法馬拉松14 棋盤問題
上帝創造了乙個n m棋盤,每乙個格仔都只有可能是黑色或者白色的。亞當和夏娃在玩乙個遊戲,每次尋找邊長為x的正方形,其中每個格仔必須為黑色,然後將這些格仔染白。如果誰不能操作了,那麼那個人就輸了。亞當喜歡質數。夏娃喜歡1,但討厭2。因此他們規定,x只有可能是非2質數或者是1。現在他們想知道,如果他們都...