LOJ2758 年輪蛋糕

2022-05-19 02:28:36 字數 1682 閱讀 5097

joi 君馬上要和妹妹 joi 子和 joi 美一起吃小吃。今天的小吃是他們三個人都很喜歡的年輪蛋糕。

年輪蛋糕是像下圖一樣呈圓筒形的蛋糕。為了把蛋糕分給三個人,joi 君必須沿著半徑方向切 3 刀,從而把蛋糕分成三塊。然而,由於年輪蛋糕硬得像實木一樣,要讓刀切進去並不簡單。因此,這個年輪蛋糕上事先準備了 n 個切口,而 joi 君只能在有切口的位置下刀。切口按順時針順序編號為 1到 n,對於 1≤i≤n−1,第 i 個切口和第 i+1個切口之間部分的大小是 ai。第 n 個切口和第 1個切口之間部分的大小是 an ​​。

圖 1:乙個年輪蛋糕的例子,n=6,a1=1,a2=5,a3=4,a4=5,a5=2,a6=4

妹控的 joi 君在把蛋糕切成 3 塊之後,自己選走最小的一塊吃掉,把剩下兩塊分給兩個妹妹。而另一方面,joi 君太喜歡年輪蛋糕了,只要能吃到的時候就會想吃很多很多。試求:最小塊的大小不超過多少。

樣例說明 1

圖 2:從第 1,3,5個切口下刀時是最優解(即圖中粗實線位置)。

這道題用二分+二分。我們知道分乙個蛋糕需要切三刀,第一刀列舉o(n),第二刀二分logn,第三刀二分logn,一共o(nlogn^2),可以過。

一、二刀會把最小的一塊給切走,然後留下一大塊。

然後用第三刀切這一大塊,如果這兩塊切完都比剛才切走的小,說明這一大塊無論怎麼切都切不出符合的結果,所以開始的一塊切大了,第二刀往小切

如果前面一塊小於剛切走的,說明第三刀要往後切;

如果後面一塊小了,就往前切;

如果兩塊都可以,說明這種切法可行,第二刀嘗試往更大的切。

注意所有陣列下表的處理。

#include #include 

#include

#include

#include

#include

#define in(a) a=read()

#define maxn 200020

#define rep(i,k,n) for(long long i=k;i<=n;i++)

using

namespace

std;

inline

long

long

read()

long

long

n;long

long

ans;

long

long

a[maxn],s[maxn];

inline

bool check(long

long i,long

long

k)

return0;

}int

main()

rep(i,

1,n)

s[i+n]=s[i+n-1]+a[i+n];

rep(i,

1,n)

ans=max(s[i+left-1]-s[i-1

],ans);

}cout

<

return0;

}

SICP練習 99 練習2 75

通過模仿書上的make from real imag函式來完成此題。define make from mag ang x y define dispatch op cond eq?op real part x cos y eq?op imag part x sin y eq?op magnitude...

275 最短路徑問題

275.最短路徑問題 描述 提交自定義測試 題目描述 平面上有n個點,每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的任務是找出從一點到另一點之間的最短路徑。輸入描述 輸入檔案共n m ...

275 隊花的煩惱一

時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 acm隊的隊花c小 經常抱怨 c語言中的格式輸出中有十 六 十 八進位制輸出,然而卻沒有二進位制輸出,哎,真遺憾!誰能幫我寫乙個程式實現輸入乙個十進位制數n,輸出它的二進位制數呀?難道你不想幫幫她嗎?輸入 輸入有多個資料,資料以...