每日一題 7月17日題目精講 BOWL 碗的疊放

2021-10-08 06:05:29 字數 1928 閱讀 4428

【每日一題】7月17日題目精講—bowl 碗的疊放

時間限制:c/c++

1秒,其他語言2秒

空間限制:c/c++

262144k,其他語言524288k

64bit io format:

%lld

小h有n個碗需要放進櫥櫃,她希望將他們疊起來放置。你知道每個碗都是規則的圓柱體,並且都是上寬下窄,你已經測量出了每個碗的兩個半徑及高,請你幫小h找出一種疊放順序,使得疊放出來的碗堆的高度盡量小,比如:

100%資料滿足n < = 9。所有輸入的數絕對值不超過1000。

輸入描述:

第一行乙個整數n,表示碗的數目。 以下n行,每行三個整數h,r1,r2。分別表示碗高及兩個半徑。其中r1輸出描述:僅乙個數,表示最小的高度。答案四捨五入取整。

示例1

輸入

複製

3

5030

8035

2570

4010

90

輸出複製

55
n<9,所以直接列舉就行,挨個試一遍取最優解

碗的疊放分幾種情況:

當前的總高度應該是上底相對於上個碗的高度+上個碗底的高度

乙個乙個的放,然後看看哪一種情況下高度最高,暴力就完事了

思路很簡單,但實現有點麻煩

斜率:2*h/(x1-x2)

我調了一陣子都沒a。。。放棄了

直接借用大佬**,參考處理的細節

**選自

#include

using

namespace std;

typedef

long

long ll;

const ll inf =

0x3f3f3f3f

;const

int maxn =

1e6+10;

double h[maxn]

, r1[maxn]

, r2[maxn]

, tmp[maxn]

;double

calc

(int x,

int y)

if(r2[x]

> r2[y]

)return

max(

0.0, h[y]

- h[x]

*(r2[y]

- r1[x])/

(r2[x]

- r1[x]))

;return

max(

0.0, h[y]

*(r2[x]

- r1[y])/

(r2[y]

- r1[y]

)- h[x]);

}int id[maxn]

;int

main()

ans =

min(ans, res);}

while

(next_permutation

(id +

1, id +

1+ n));

printf

("%d\n",(

int)

(ans+

0.5));

return0;

}

每日一題 4月7日題目精講 樹

樹 時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k 其他語言262144k 64bit io format lld 題目描述 shy有一顆樹,樹有n個結點。有k種不同顏色的染料給樹染色。乙個染色方案是合法的,當且僅當對於所有相同顏色的點對 x,y x到y的路徑上的所有點的顏色...

每日一題 7月1日題目精講 借教室

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。面對海量...

每日一題 5月7日題目精講 火 皇家烈焰

火 皇家烈焰 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld帕秋莉掌握了一種火屬性魔法 由於鍾愛掃雷遊戲,帕秋莉把自己圖書館前的走廊看作乙個一維的掃雷地圖,她製造了很多烈焰,排在這條走廊內 現在帕秋莉告訴你一部分...