0分,用的堆,求调

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G

你把两堆合并后,要把合并的新堆加回去
by Small_Tang @ 2022-02-19 14:34:51


我没用对,用的 `vector<int>` 直接就过了,数据量不大,`upper_bound()` 查找效率 $\log N$,然后插入对应位置,总时间 $N \log N$ ```cpp #include <iostream> #include <algorithm> #include <vector> using namespace std; vector<int> v; int main(){ int n, num, ans=0; cin >> n; for (int i=0; i<n; i++) { cin >> num; v.push_back(num); } sort(v.begin(), v.end()); while(v.size() > 2) { int n1 = *v.begin(); v.erase(v.begin()); int n2 = *v.begin(); v.erase(v.begin()); ans += (n1 + n2); int pos = upper_bound(v.begin(), v.end(), n1+n2)-v.begin(); v.insert(v.begin()+pos, n1+n2); } cout << v[0] + v[1] + ans << endl; return 0; } ```
by wali_robot @ 2022-02-20 07:42:53


|