秒速五厘公尺 快速二分跳躍查詢答案)

2021-10-01 18:54:23 字數 1611 閱讀 9793

#問題 d: 秒速五厘公尺

描述櫻花飄落的速度,每秒五厘公尺。

動漫《秒速五厘公尺》中,明里曾在信中寫道「我家附近有棵很大的櫻花樹,到了春天,

那棵樹上的花瓣,大概也會以每秒五公分的速度飄落,而我則在想,要是能和貴樹一

起迎接春天的來臨該有多好啊。」

來年春天,他們沒能像約定那樣一起迎接春天的到來,看櫻花飄落。但有乙個魔法,

可以讓他們有m秒的時間一起看櫻花飄落,櫻花樹上有n朵櫻花,每朵櫻花都有乙個高度a[i],

櫻花飄落的速度為v,櫻花只能一朵一朵的飄落,如果某朵櫻花飄落的時間不是整數,

則那朵櫻花飄落所需的時間要向上取整,即,若兩朵櫻花的高度都為7,飄落的速度為2,

則兩朵櫻花飄落的時間為8,現在你可以控制櫻花飄落的速度v,當v為何值時才能使所有的

櫻花在m秒的時間內全部飄落且v的值要盡可能小。

格式輸入格式

第一行輸入兩個正整數n和m(1<=n<=m<=2000000)

第二行輸入n個正整數a[i](1<=a[i]<=10000000),分別指的是每朵櫻花的高度

輸出格式

輸出乙個正整數v,代表櫻花最合適的速度

樣例樣例輸入 copy

2 10

5 6樣例輸出 copy

2題解:該題資料過於龐大,不可能通過直接列舉得到,所以需要二分答案法;

但是測試時發現二分也超時了,最後我想出了兩種方法。

#include

using

namespace std;

long

long b[

10000010];

long n,m,maf;

bool

check

(long x)

if(i*x>=maf)

if(i==

1) ans+

=b[x];if

(i!=

1)ans+

=(as-sum)

*i;}

if(ans>m)

return

false

;else

return

true;}

intmain()

for(

long i=

2;i<=maf;i++

) b[i]

+=b[i-1]

;// **通過這步將每個b[i] 變為 小於等於i 的 路程個數之和**

long r=sum,l=1;

while

(r>=l)

// **普通二分 沒什麼變化 重點在這個查詢函式裡面**

else l=mid+1;

}printf

("%lld\n"

,ans);}

return0;

}

第二種方法的效率比第一種要低一些,重點在対二分剪枝

long r=maf,l=sum/m;    // **剪枝**

while(r>=l)

else l=mid+1;

}

如果使用剪枝的話,可以直接遍歷每乙個數就行,不需要跳躍式遍歷也可以ac,但是我覺得跳躍式更好一些。

二分## 二分

《秒速五厘公尺》短評

秒速五厘公尺 是三個短片構成的60分鐘愛情動畫。再簡單的故事,用心敘述也可以很感人。畫面十分唯美,清新,給人一種親近感。星之聲 世界上最遙遠的距離,不是生與死,而是我發了封郵件,你在八年後才開啟 櫻花抄 世界上最遙遠的距離,不是超越光年的愛戀,而是明明相愛,卻不能在一起 太空飛行員 世界上最遙遠的距...

秒速五厘公尺 (牛客二分題)

動漫 秒速五厘公尺 中,明里曾在信中寫道 我家附近有棵很大的櫻花樹,到了春天,那棵樹上的花瓣,大概也會以每秒五公分的速度飄落,而我則在想,要是能和貴樹一起迎接春天的來臨該有多好啊。來年春天,他們沒能像約定那樣一起迎接春天的到來,看櫻花飄落。但有乙個魔法,可以讓他們有m秒的時間一起看櫻花飄落,櫻花樹上...

1 秒速5 秒速五厘公尺

昨天,我做了乙個夢,乙個很久之前的夢。在夢裡,我們還只有13歲,在夢裡,一片被白雪覆蓋的廣闊的田園上。僅僅能從遠方些許地看到燈光,剛剛積起的雪地,只有我們走過時留下的足跡,就是這樣,什麼時候能再一次,一起賞櫻花。過往數年間,我只是想著先往前走想要觸控遙不可及的事物,但連那具體的目標是什麼,以及幾乎可...