先奉上**--本人的手打大根堆。
標頭檔案需要 (也可以不要,把建構函式刪了就是)。
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 點濕度外...