POJ 3863坐電梯 模擬推公式

2022-01-19 21:57:46 字數 1102 閱讀 8816

傳送門:

m個電梯,n次按鈕,m對數字,第乙個數字是上多少層,第二個是下。求出選擇乙個電梯n次按鈕最低的樓層,注意這個樓層是大於0的!題目中也說了lowest above the ground floor!

設x次上公升,測下降n-x,則上公升了k層 =  a*x - b*(n-x)。

這裡兩種做法:

1:第一種採用數學公式上的理解,單純就是從公式思想上來看的,上面公式變形得x為自變數的公式:k = (u+d)x - dn

這裡其他已知,x未知,範圍是0到n,0不可取,n可取。

從公式上看,每次都是增加或者減少乙個u+d,然後在k>0的情況取最小值,我們這裡直接這樣,x取最大值,等於n,此時k = un,然後每次減少乙個u+d,則除以u+d得的是多少個u+d,直接去u+d取模,就得到在u+d線性變化下能得到的最小的k了,注意能整除時,則最後乙個u+d就是最小值了。

**:

#include #include 

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn = 100000000

;int

main()

printf(

"%i64d\n

", res);

return0;

}

2.第二種就是

另上式等於0,我們可以得到當 x'= b*n/(a+b) 時為第0層

由於 x 必須為正整數,我們對 x' 向上取整,就得到可以到達的最低樓層

但是現在有乙個漏洞,如果 x' 就是乙個正整數,那麼我們向上取整後還是x'本身

遇到這種情況此時的x'=x'+1,也就是說我們就多上一層少下一層,就能避開到達0層了

(其實可以直接int(x+1)就直接解決上面的問題了)

#include using

namespace

std;

intmain()

cout

}return0;

}

view code

Problem 奶牛坐電梯

問題描述 有n頭牛在樓頂,需要坐電梯下來,電梯最大承載量為w,牛 i 的重量為c i 怎樣安排,才能電梯上下的次數最少,而使所有的牛下來。輸入第一行給出奶牛頭數n,及電梯的容量w.接下來n行給出每個奶牛的重量 1 n 18 1 w 100,000,000 1 ci w 輸出電梯上下的次數r 樣例輸入...

Problem 奶牛坐電梯

problem 奶牛坐電梯 description 有n頭牛在樓頂,需要坐電梯下來,電梯最大承載量為w,牛 i 的重量為c i 怎樣安排,才能電梯上下的次數最少,而使所有的牛下來。input 第一行給出奶牛頭數n,及電梯的容量w.接下來n行給出每個奶牛的重量 1 n 18 1 w 100,000,0...

乘坐電梯的問題

題目內容 說明 1 假設最開始電梯在0層,n個人從第0層進電梯,中間不再增添新乘客 2 n個人都到達各自的樓層後,電梯需要回到0層 3 到同一樓層的人不管有幾人,電梯開門的時間總共只需要5秒.輸入格式 輸入資料首先包含乙個整數n 0 n 10 表示電梯內的人數 然後是n個人要到的樓層si 1 si ...