支付帳單問題

2021-04-06 20:09:00 字數 1202 閱讀 6747

題目描述

比爾最近遇到了一件麻煩事。每天上午,他會收到若干張帳單(也可能一張也沒收到)

, 每一張都有一定的面額。下午,他會從目前還沒有支付的帳單中選出面額最大和最小的兩

張,並把它們付清。還沒有支付的帳單會被保留到下一天。現在比爾已經知道他每天收到

帳單的數量和面額,請你幫他給出支付的順序。

輸入格式

第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需要的...