問題描述
試題編號:
201412-3
試題名稱:
集合競價
時間限制:
1.0s
記憶體限制:
256.0mb
問題描述:
問題描述
某**交易所請你編寫乙個程式,根據開盤前客戶提交的訂單來確定某特定**的開盤價和開盤成交量。
該程式的輸入由很多行構成,每一行為一條記錄,記錄可能有以下幾種:
1. buy p s 表示乙個購買**的買單,每手出價為p,購買股數為s。
2. sell p s 表示乙個****的賣單,每手出價為p,**股數為s。
3. cancel i表示撤銷第i行的記錄。
如果開盤價為p0,則系統可以將所有出價至少為p0的買單和所有出價至多為p0的賣單進行匹配。因此,此時的開盤成交量為出價至少為p0的買單的總股數和所有出價至多為p0的賣單的總股數之間的較小值。
你的程式需要確定乙個開盤價,使得開盤成交量盡可能地大。如果有多個符合條件的開盤價,你的程式應當輸出最高的那乙個。
輸入格式
輸入資料有任意多行,每一行是一條記錄。保證輸入合法。股數為不超過108的正整數,出價為精確到恰好小數點後兩位的正實數,且不超過10000.00。
輸出格式
你需要輸出一行,包含兩個數,以乙個空格分隔。第乙個數是開盤價,第二個是此開盤價下的成交量。開盤價需要精確到小數點後恰好兩位。
樣例輸入
buy 9.25 100
buy 8.88 175
sell 9.00 1000
buy 9.00 400
sell 8.92 400
cancel 1
buy 100.00 50
樣例輸出
9.00 450
評測用例規模與約定
對於100%的資料,輸入的行數不超過5000。
//模擬1 #include2 #include3 #include4 #include5 #include6
using
namespace
std;
7struct
node8;
13 node n[5007],n1[5007],n2[5007
];14
bool flag[5007
];15
intnum,num1,num2;
16long
long
ans_num;
17double
ans_price;
18bool
cmp1(node n11,node n22)
1924}25
bool
cmp2(node n11,node n22)
2630
void
slove()
3143
if(ans_num48}
4950
intmain()
5160
else
if(n[num].s=="
cancel")
64}65for(int i=num-1;i>=1;i--)
6670
}71 num1=0;num2=0;72
for(int i=1;i)
7379
else
if(n[i].s=="
sell")
83}84}
85 sort(n1,n1+num1,cmp2);
86 sort(n2,n2+num2,cmp1);
87slove();
88 printf("
%.2lf %lld\n
",ans_price,ans_num);
89return0;
90 }
CCF 集合競價
以下是我做題的經驗,如有錯誤,請諒解並指正 s代表賣家,b代表買家 1.最好不要以s的 來選取開盤價p0 題目中已說明 如果有多個符合條件的開盤價,你的程式應當輸出最高的那乙個。b 應比s的高 以s的 來選取p0的 提交後錯誤 一 include include include include in...
12 競態條件 時序競態
sleep函式幾點說明 1 sleep函式作用,讓程序睡眠。2 能被訊號打斷,然後處理訊號函式以後,就不再睡眠了。直接向下執行 3 sleep函式的返回值,是剩餘的秒數 sleep是可被中斷的睡眠,但不一定睡夠100s sleep是可中斷的睡眠 void handler int num if 1 v...
如何確定競品物件 如何收集競品資料
該什麼時候進行?通常來說沒有明確的時間規定,也沒有明確的次數限制。在產品開發迴圈中的任意乙個環節開始都可以得到大量有效的資訊。怎樣確定競品?看上去是個很容易的活,但其實則比你想象的難。我們需要在腦中建立乙個清晰的 標尺 來將各種潛在的對手分級。確定了競品名單之後做什麼?接下來就需要把每個競品的詳細資...