X-Magic Pair gcd,剪枝(1600)
生活随笔
收集整理的這篇文章主要介紹了
X-Magic Pair gcd,剪枝(1600)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意 :
- 給一個數對a,b和一個數x,每次操作可以選擇使a或者b變成∣a?b∣|a-b|∣a?b∣(即變成它們的差值),問在若干次(0)操作后,是否能使得a或者b等于x
方案一 :
- 如果一開始就有一個數等于x,直接true;如果一開始就兩個數都小于x,直接false,因為a和b都是正整數,每次操作都會使其中一個變小
- 對于一對(a,b),假設a>=b,考慮對a操作,此時如果通過若干次操作,使得要求被滿足,那么我們可以記為a?p?b=xa-p*b=xa?p?b=x,要使得一個正整數p存在,需要滿足a>=x,且xa>=x,且xa>=x,且x%b=ab=ab=a%bbb 也就是(a?x)(a-x)(a?x)%b=0b=0b=0,當方程組被滿足時,說明有解
- 如果當前無解,我們可以對余下的數繼續進行操作,這就相當于對(b,a(b,a(b,a%b)b)b)這一對數繼續進行求解,這一部分我們可以通過遞歸來實現
- 過程中還有兩個剪枝特判,如果小的那個數為0,直接false;如果滿足上述方程組,直接true
方案二 :
- 這和 更相減損術 很像(每次迭代其中一個數變成了差值),因此想到了gcd
- 裸gcd不一定能過,因此盡可能的剪枝
- 講一下其中的一個剪枝。我們假設a>=b,且每次對a迭代,那么每次a都減少一個b,因此,只要a與x的差值是若干個b,那么直接剪枝判斷true
總結
以上是生活随笔為你收集整理的X-Magic Pair gcd,剪枝(1600)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 质数,约数(数论) AcWing算法课
- 下一篇: Max Sum Array 贪心(250