題解 P1843 奶牛曬衣服

2022-03-07 02:54:46 字數 1648 閱讀 2622

先奉上**--本人的手打大根堆。

標頭檔案需要 (也可以不要,把建構函式刪了就是)。

struct heap

// 建構函式

inline void insert (const int key) }

inline void maintain(const int increment) }

inline int get()

return heap[size + 1];

}} h;

然後讓我們來看一下這個堆支援的基本操作:

inline void insert (const int key)//inline 是乙個小優化

}

\(<<\) , \(>>\) 是移位操作

其中 \(a << i\) 相當於 $a \times 2^i $ 。

\(a >> i\) 則相當於 \(a \times 2^\)。

舉例:1 轉換成二進位制是 \(1__2}\) ,而 \(1 << 3\) 就是變為 \(_2\) 即 \(2^3 = 8__2}\) ,正好移了三位

移位操作不支援負數,浮點數等,它的速度比常規 \(\times\) ,\(\div\) 要快一點(它是基於二進位制的操作)。

向上調整其實沒什麼好說的,注意不要越界就是了,時間複雜度 \(\theta(log_2n)\)

inline void maintain(const int increment)

}

\(i | 1\) 在**中相當於 \(i + 1\)

原理則是基於移位操作,如:

\(1__2} << 1\) 變為 \(2__2}\) 再與 \(1__2}\) 進行或操作 \(__2}^_2}\) 就變成\(3__2}\) (二進位制位一一對應,只要有乙個是 \(1\) 就置為 \(1\) ) 。

時間複雜度也是 \(\theta(log_2n)\) 。

inline int get()

return heap[size + 1];//返回此前的堆首

}

跟維持操作沒什麼區別,稍微改一下就是的,時間複雜度也是 \(\theta(log_2n)\)

很容易就想到乙個貪心的思路,模擬每乙個小時,對濕度最大那件用烘衣機,烘完以後重新找當前濕度最大的使用,最後得到的肯定是最優的。

於是這道題便可以水(直接用 \(stl\) 也可以)過去了。

時間複雜度 \(\theta(nlog_2n)\)

template inline void in(t& x)

}

快速讀入模板

int main()

printf("%d",tim/a);

return 0;

}

用 \(tim\) 來累計當前自然風乾的濕度,\(h.heap[1]\) 是目前濕度最大的衣服。

\(a\) 是自然風乾速度, \(b\) 是烘衣機烘乾速度。

最後輸出 \(tim \div a\) 。

提交記錄: 手打堆評測記錄

小聲 bb 幾句:除了打表的,我這應該算是很快的。這個題解花的時間比我打正解花的時間久

人生第二篇題解依然沒過

洛谷 P1843 奶牛曬衣服

原題 熊大媽決定給每個牛寶寶都穿上可愛的嬰兒裝 於是 為牛寶寶洗曬衣服就成了很不爽的事情。題目描述 熊大媽請你幫助完成這個重任 洗完衣服後 你就要弄幹衣服 衣服在自然條件下用 1 的時間可以曬乾 a 點濕度 摳門的熊大媽買了 1 台烘衣機 使用烘衣機可以讓你用 1 的時間使 1 件衣服除了自然曬乾 ...

洛谷 P1843 奶牛曬衣服

熊大媽決定給每個牛寶寶都穿上可愛的嬰兒裝 於是 為牛寶寶洗曬衣 服就成了很不爽的事情。熊大媽請你幫助完成這個重任 洗完衣服後 你就要弄幹衣服 衣服在 自然條件下用 1 的時間可以曬乾 a 點濕度 摳門的熊大媽買了 1 台烘衣機 使用烘衣機可以讓你用 1 的時間使 1 件衣服除了自然曬乾 a 點濕度外...

洛谷 P1843 奶牛曬衣服

熊大媽決定給每個牛寶寶都穿上可愛的嬰兒裝 於是 為牛寶寶洗曬衣 服就成了很不爽的事情。熊大媽請你幫助完成這個重任 洗完衣服後 你就要弄幹衣服 衣服在 自然條件下用 1 的時間可以曬乾 a 點濕度 摳門的熊大媽買了 1 台烘衣機 使用烘衣機可以讓你用 1 的時間使 1 件衣服除了自然曬乾 a 點濕度外...