t1
題目描述:
一開始你有乙個數s,你可以通過兩種操作改變這個值:
1.給這個數加a
2.給這個數乘b
問最少多少步操作可以使s變成t。
輸入格式:
一行4個數,分別代表s,t,a,b。
資料範圍:
118118
218這道題比較噁心了,看到1018的資料範圍可能就會想到這是不是數學,然後搜刮腦子裡那少的可憐的數學公式或定理(我就是這麼做的,然後浪費了好長時間qaq)
不過我在手模樣例的時候有了這麼乙個發現:
好像所有的情況都能化簡成最後的這個式子即:
哦!天哪,這個wa太不吉利了(瘋狂暗示)(˘•ω•˘)
不過這樣我們就可以貪心的解決這道題了
while(s*bksks) / a找出w。
這樣資料就都全了,可是怎麼求解最小步數呢?
乘k次b肯定跑不了了,接下來要加多少次a呢?
我們可以每次都 用w%b來獲得最末尾項加a的次數,然後用 w / b來把倒數第二位的項變為最末尾的項,如下圖:
什麼!你問如果ci >b 怎麼辦?你可以想一想,如果它大於b,那你把它放到前一項裡不是會更優嗎?所以貪心的假定每乙個c都小於b得到的就是優的結果。
好,那咱們現在把題交上去。。。。。
噫~好!我wa了!φ(≧ω≦*)♪
現在咱們來考慮一下到底是哪齣鍋了。(*/ω\*)
還是比較明顯的,問題就出在這裡 (t - bks) / a不一定是個整數,也就是說,你找的這個最大的k其實不對,它沒辦法構成t。
不過好在解決辦法也很簡單——把每個k都找一遍不就行了,就是b是最小的2,那k等於100時它也有1267650600228229401496703205376,這個數遠超最大資料1018
好!咱們再交一遍。。。。。。。
噫~好!我又wa了( ゚∀゚) ,究其原因無非就是1018太大了,很容易爆long long,這時候判斷k就不能用 s*b(我覺得其實應該加上等於號的,但是不加也過了)
這次再交就沒有問題了。( • ̀ω•́ )✧
最後附上**和注釋:
1 #include2( • ̀ω•́ )✧感謝大佬accoty_am的幫助using
namespace
std;
3long
long
s,t,a,b;
4long
long ans = 1e18+7;//
先賦乙個大值 方便取min
5int
main()
627 ans = min(ans,now+w);//
在每種情況的k下尋找最小的步數
28//
now+w是因為最後除完b會可能會剩下最高次項的常數 ,如果不剩下加個0也無所謂 29}
30 cout/
輸出結果
31 }
(๑′ᴗ‵๑)i lᵒᵛᵉᵧₒᵤ❤為美好的**獻上祝福
(o°ω°o)csp(noop)rp++
2023年9月18日總結
這幾天各種綜合測評的事感覺狀態沒有自己想象中的好,當然這也不是自己不好好看部落格的理由。這幾天沉迷於數論中無法自拔,又找了一些容斥定理的東西,找了乙個總結性的部落格,然後前幾道還好,後來有一道組合數的題卡了我兩天,今天上概率論的時候突然恍然大悟。題意是 給出乙個方程 x1 x2 x3 x4 x5 x...
2023年9月28日總結
今天上午開會,翹了小組的討論,哎,沒辦法。其實自己想了很多東西,感覺自己也是乙個容易想多的人,想著自己的不足之處,想著自己和別人的差距,但說實話想的和現實一直都是不對等的。就拿乙個 題來說,想的思路雖然可以讓你寫出乙個題的 框架,但實現的過程,往往會遇到各種問題,有可能在實驗敲 的過程中會發現有更好...
2023年9月29日總結
今天出去吃了自助,好滿足。今天晚上開始看題,主要看的是排列組合,組合數這一塊感覺和概率還是挺相似的,有很多共性的東西,需要注意的細節也就是有除法要用到逆元,快速冪處理就行。單純的排列組合還好,今天看到好幾道組合數和dp,圖論的結合,一想也不能每次都逃避,每次都只是去收藏,然後今天就看了,其實只要一步...