小明搬家 NOI導刊2010提高(05)

2022-05-11 12:17:23 字數 1418 閱讀 4216

小明要搬家了,大家都來幫忙。

小明現在住在第n樓,總共k個人要把x個大箱子搬上n樓。

最開始x個箱子都在1樓,但是經過一段混亂的搬運已經亂掉了。最後大家發現這樣混亂地搬運過程效率太低了,於是總結出了提高效率的方法。

大家的速度都是每分鐘上(或下)一層樓。所有向上走的人手中都拿乙個箱子,所有向下走的人手中都不拿箱子。到達第n層立刻放下箱子向下走,到達第1層立刻拿起箱子向上走。當乙個人向上走,另一人向下走而在樓道裡相遇時,向上走的人將手中的箱子交給另一人,兩人同時反向。即原來拿箱子向上走的人不拿箱子向下走,原來不拿箱子向下走的人現拿著箱子向上走。

求將所有箱子搬完所需的最短時間。

輸入格式:

第一行n(n≤10^9),k(k≤500000),m(m≤10^9),分別表示樓層數、人數、還放在一樓地上的箱子數。

接下來k行,每行兩個數ai,bi。

ai表示第i人現所在的樓層數,bi為0或1,為0表示第i人正拿著箱子向上走,為1表示第i人不拿箱子向下走。

輸入滿足沒有任意兩人正在同一樓層,在第1層的人一定正拿著箱子向上走,在第n層的人一定正不拿箱子向下走。

輸出格式:

僅包含乙個整數,為搬完箱子的時間。

輸入樣例#1:

5 2 4

1 03 0

輸出樣例#1:

20

對於30%的資料有k≤100,m≤100;

對於60%的資料有k≤1000,m≤l09;

對於l000/o的資料有k≤500000,m≤109。

這道題分析時可以忽略「當乙個人向上走,另一人向下走而在樓道裡相遇時,向上走的人將手中的箱子交給另一人,兩人同時反向」這句話,因為想想就知道換了和沒換其實差不多

跟藍皮書上的一道叫什麼螞蟻的題想法很像

分析時先假設所有人都一起搬了整數趟回到原來位置,然後若剛好搬完則把這些時間加上所有人中距樓頂所需時間最大的人的時間(向下時時間為負數),沒有正好搬完則從最小時間開始依次再加一趟,然後再取最長的時間

1 #include2 #include3 #include4 #include5

using

namespace

std;

6int s[500001

],cnt;

7long

long

n,k,m;

8int

main()

9 17 sort(s+1,s+k+1

);18 s[0]=s[k];

19 cout<<(m/k)*(n-1)*2+s[m%k];

20 }

方程的解 NOI導刊2010提高

題目描述description佳佳碰到了乙個難題,請你來幫忙解決。對於不定方程a1 a2 ak 1 ak g x 其中k 2且k n,x是正整數,g x x x mod 1000 即x x除以1000的餘數 x,k是給定的數。我們要求的是這個不定方程的正整數解組數。舉例來說,當k 3,x 2時,分別...

淘汰賽制(NOI導刊2010提高 01)

淘汰賽制 noi導刊2010提高 01 題目描述 淘汰賽制是一種極其殘酷的比賽制度。2n名選手分別標號1,2,3,2 n 1,2 n,他們將要參加n輪的激烈角逐。每一輪中,將所有參加該輪的選手按標號從小到大排序後,第1位與第2位比賽,第3位與第4位比賽,第5位與第6位比賽 只有每場比賽的勝者才有機會...

黑匣子 NOI導刊2010提高(06)

題目描述 black box是一種原始的資料庫。它可以儲存乙個整數陣列,還有乙個特別的變數i。最開始的時候black box是空的 而i等於0。這個black box要處理一串命令。命令只有兩種 add x 把x元素放進blackbox get i加1,然後輸出blackhox中第i小的數。記住 第...