2023年9月15日晚間測試 T1

2022-08-19 10:15:12 字數 2448 閱讀 5815

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

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 }

( • ̀ω•́ )✧感謝大佬accoty_am的幫助

(๑′ᴗ‵๑)i lᵒᵛᵉᵧₒᵤ❤為美好的**獻上祝福

(o°ω°o)csp(noop)rp++

2023年9月18日總結

這幾天各種綜合測評的事感覺狀態沒有自己想象中的好,當然這也不是自己不好好看部落格的理由。這幾天沉迷於數論中無法自拔,又找了一些容斥定理的東西,找了乙個總結性的部落格,然後前幾道還好,後來有一道組合數的題卡了我兩天,今天上概率論的時候突然恍然大悟。題意是 給出乙個方程 x1 x2 x3 x4 x5 x...

2023年9月28日總結

今天上午開會,翹了小組的討論,哎,沒辦法。其實自己想了很多東西,感覺自己也是乙個容易想多的人,想著自己的不足之處,想著自己和別人的差距,但說實話想的和現實一直都是不對等的。就拿乙個 題來說,想的思路雖然可以讓你寫出乙個題的 框架,但實現的過程,往往會遇到各種問題,有可能在實驗敲 的過程中會發現有更好...

2023年9月29日總結

今天出去吃了自助,好滿足。今天晚上開始看題,主要看的是排列組合,組合數這一塊感覺和概率還是挺相似的,有很多共性的東西,需要注意的細節也就是有除法要用到逆元,快速冪處理就行。單純的排列組合還好,今天看到好幾道組合數和dp,圖論的結合,一想也不能每次都逃避,每次都只是去收藏,然後今天就看了,其實只要一步...