å› äØ“é¢˜ç›®æ•°æ®è¾ƒå°åQŒæ‰€ä»¥å¯ä»¥ç›´æŽ¥æ¨¡æ‹Ÿã€?/span>
æ¯è¯»å…¥ä¸€ä¸ªå‘½ä»¤æ‰€è¦è¿›è¡Œçš„æ“ä½œ:
如果是buy,则该¿Uähæ ¼çš„ä¹°å…¥æ•?niåQŒå°†è¯¥ç§ä»äh ¼åŠ å…¥åˆîC¹°å…¥ähæ ¼çš„é›†åˆä¸ã€?/span>
如果是sell,则该¿Uähæ ¼çš„å–出æ•?miåQŒå°†è¯¥ç§ä»äh ¼åŠ å…¥åˆ°å–å‡ÞZhæ ¼çš„é›†åˆä¸ã€?/span>
然厘q›è¡Œé”€å”®çš„æ“ä½œåQ?/span>
比较最低的å–出ä»äh ¼å’Œæœ€é«˜çš„ä¹°å…¥ä»äh ¼åQ?/span>
如果å‰è€…å°äºŽç‰äºŽåŽè€…则åQ?/span>
设最低å–å‡ÞZhæ ¼çš„å–出æ•îCØ“a,最高买入ähæ ¼çš„ä¹°å…¥æ•îCØ“b.
则a=a-min(a,b),b=b-min(a,b)
如果其ä¸å–出数å˜ä¸?åQŒåˆ™åœ¨å–å‡ÞZhæ ¼é›†åˆä¸åˆ 去该ç§å–出ä»äh ¼ã€‚买入数åŒç†ã€?/span>
记录股票ä»äh ¼
------------------------------------------------------------------------------------------------------
直到最低的å–出ä»äh ¼æ¯”最高的买入ä»äh ¼è¦é«˜æˆ–者其ä¸ä¸€ä¸ªé›†åˆäØ“½Iºæ—¶è·›_‡ºã€?/span>
ž®†ä½™ä¸‹æ¥æœ€ä½Žçš„å–出æ•îC¸ä¸?çš„å–å‡ÞZhæ ÆD¾“出,如果å–出ä»äh ¼é›†åˆä¸ºç©ºž®Þp¾“å‡?#8221;-”
ä¹°å…¥ä»äh ¼åŒç†åQŒæœ€åŽå†è¾“出股票ä»äh ¼
˜q™æ ·ž®±å®Œæˆäº†ä¸€‹Æ¡å‘½ä»¤çš„æ“ä½œ
注æ„å–出ä»äh ¼é›†åˆä¸ºç©ºå’Œä¹°å…¥ähæ ¼é›†åˆäØ“½Iºæ—¶çš„æƒ…å†?/span>
代ç 如下:
1 //by NKU lkjslkjdlk
2 #include<cstdio>
3 #include<cstring>
4 #include<set>
5 using namespace std;
6 inline int min(int x,int y){return x<y?x:y;}
7 int cas,or_num,sto_pri,i,bid[1005],ask[1005],trade_num,trade_pri,min_de;
8 char order[100],tmp[10],bs[5],ch;
9 set<int> bids,asks;set<int>::reverse_iterator biter;set<int>::iterator aiter;
10 void print(){
11 if(asks.empty())printf("- ");else printf("%d ",*asks.begin());
12 if(bids.empty()) printf("- ");else printf("%d ",*bids.rbegin());
13 if(sto_pri==-1) printf("-\n");else printf("%d\n",sto_pri);
14 }
15 void sell(){
16 while(1){
17 biter=bids.rbegin();aiter=asks.begin();
18 if(*biter>=*aiter){
19 min_de=min(bid[*biter],ask[*aiter]);
20 bid[*biter]-=min_de;ask[*aiter]-=min_de;
21 sto_pri=*aiter;
22 if(bid[*biter]==0) bids.erase(*biter);
23 if(ask[*aiter]==0) asks.erase(*aiter);
24 }
25 if(asks.empty()||bids.empty()) break;
26 if(*asks.begin()>*bids.rbegin()) break;
27 }
28 }
29 int main()
30 {
31 scanf("%d",&cas);
32 while(cas--){
33 bids.clear();asks.clear();
34 memset(bid,0,sizeof(bid));memset(ask,0,sizeof(ask));
35 scanf("%d%c",&or_num,&ch);
36 for(i=0,sto_pri=-1;i<or_num;i++){
37 gets(order);sscanf(order,"%s %d %s %s %d",bs,&trade_num,tmp,tmp,&trade_pri);
38 if(!strcmp(bs,"buy")){
39 bids.insert(trade_pri);bid[trade_pri]+=trade_num;
40 if(!asks.empty()){sell();print();}else print();
41 }
42 else{
43 asks.insert(trade_pri);ask[trade_pri]+=trade_num;
44 if(!bids.empty()){sell();print();}else print();
45 }
46 }
47 }
48 return 0;
49 }