題目描述
比爾最近遇到了一件麻煩事。每天上午,他會收到若干張帳單(也可能一張也沒收到)
, 每一張都有一定的面額。下午,他會從目前還沒有支付的帳單中選出面額最大和最小的兩
張,並把它們付清。還沒有支付的帳單會被保留到下一天。現在比爾已經知道他每天收到
帳單的數量和面額,請你幫他給出支付的順序。
輸入格式
第1 行:乙個正整數n(n≤30,000),表示總共的天數。
第2 行到第n+1 行:每一行描述一天中收到的帳單。先是乙個非負整數m,表示當天
收到的賬單數,後跟m 個正整數(都小於1,000,000,000),表示每張帳單的面額。
輸入資料保證每天都可以支付兩張帳單,並且帳單會在最後一天全部付清。
輸出格式
輸出共n 行,每行兩個用空格分隔的整數,分別表示當天支付的面額最小和最大的支
票的面額。
輸入樣例
4 3 3 6 5
2 8 2
3 7 1 7
0 輸出樣例
3 6
2 8
1 7
5 7
解:從題目給出的資料範圍可以看出,可以演算法的時間複雜度要比o(n2)低,o(n log n)
是可以接受的。o(n log n)的演算法也有很多,比如,我們可以建立兩個堆,乙個最大堆,一
個最小堆,並在相應元素之間建立乙個對映。收到賬單時,就把面額推入兩個堆中,調整
位置;支付帳單時,分別從兩個堆中取出堆頂元素,並進行調整。由於元素在入堆後位置
需要進行調整,因此很難用stl 中的優先佇列來實現,如果採用這種演算法,我們必須自己
寫堆的**。
另外一種o(n log n)的演算法就是用平衡二叉樹,但如果自己寫平衡二叉樹的演算法,實現
起來比上面一種更繁。但由於stl 中的集合是用紅黑樹來實現的,借助它,我們的程式可
以變得十分簡單(注意到帳單的面額可能會相同,我們必須使用multiset)
#include
#include
using namespace std;
int main()
cout << *bills.begin() << ' ' << *--bills.end() << endl;
bills.erase(bills.begin())
;bills.erase(--bills.end());}
}
eshop支付問題
q1 本次事件影響哪些使用者?主要影響在美洲區eshop使用國內信用卡購買的使用者,本來就使用充值卡並且多賬戶的使用者可以跳過。另 亞洲區 歐洲區 非洲區仍能直接使用國內全幣種信用卡。q2 常見打折地區都有哪些,支援哪些支付方式?美洲區 美國 墨西哥 加拿大 美國paypal 歐洲區 俄羅斯 挪威 ...
微信支付和支付寶支付 買票問題的鎖定問題
最近公司的專案涉及技師上門o2o服務,其中某乙個特定的技師,每天的8 30 9 00 9 30 10 00 20 00 這些時間點可以被預約,如果乙個使用者預約了9 00 的技師,而沒有付款,那麼9 00 9 30 10 00 這三個時間需要被鎖定置灰,即假設這三個時間點技師在服務,不能提供服務。使...
iOS支付寶支付相關問題
支付寶實現以及相關問題 1 支付寶支付流程 1.使用者點選支付 2.客戶端請求伺服器使用者支付 3.伺服器接收請求生成金額訂單等要給第三方支付的一切資訊,並生成 引數傳給客戶端 4.客戶端接收資訊 一般會再讓使用者確認支付或者乾脆購買後是生成訂單,然後才是付款 並將伺服器給的資訊分別傳入sdk需要的...