翻硬幣思路 演算法馬拉松11 A翻硬幣

2021-07-10 04:41:41 字數 1069 閱讀 2161

題目:

有 n 個硬幣,一開始全部正面朝上,每次可以翻轉 k 個硬幣( k 小於 n ),那麼至少要 p 次翻轉,才能讓所有硬幣反面朝上,求 p 的值。如果不能成功翻轉則輸出-1

input

輸入2個數:n,k (1 <= n <= 10^9, 1 <=  k <= 10^9)。
output

輸出翻轉次數的最小值。

如果不能成功翻轉則輸出-1

input示例

6 5
output示例

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。現在他們想知道,如果他們都...