#問題 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歲,在夢裡,一片被白雪覆蓋的廣闊的田園上。僅僅能從遠方些許地看到燈光,剛剛積起的雪地,只有我們走過時留下的足跡,就是這樣,什麼時候能再一次,一起賞櫻花。過往數年間,我只是想著先往前走想要觸控遙不可及的事物,但連那具體的目標是什麼,以及幾乎可...