思路:照著模擬就行
坑點:乙個訂單可能會被刪除多次,還有乙個點。。。優先佇列的top函式,返回的是乙個copy。。。
**如下:
/*
*/#define local
#include#include#include#include#include#include#include#include#includeusing namespace std;
#define maxn 10010
#define inf 40000000
#define ll long long
struct buy
}; struct node
;int main()
if(k.price<=nowbp)
);sellcnt[k.price]-=trade;
flag[k.id].size-=trade;
if(k.size==0)
nowbs-=trade;
if(nowbs==0) break;
}else break;
}if(nowbs)
);flag[id].cancel=0;flag[id].size=nowbs;flag[id].price=nowbp;
if(buycnt.find(nowbp)==buycnt.end()) buycnt[nowbp]=nowbs;
else buycnt[nowbp]+=nowbs;}}
else if(op[0]=='s')
if(k.price>=nowsp)//買價高於賣價
);buycnt[k.price]-=trade;
flag[k.id].size-=trade;
if(k.size==0)
nowss-=trade;
if(nowss==0) break;
}else break;
}if(nowss)
);flag[id].cancel=0;flag[id].size=nowss;flag[id].price=nowsp;
if(sellcnt.find(nowsp)==sellcnt.end()) sellcnt[nowsp]=nowss;
else sellcnt[nowsp]+=nowss;}}
else
}else}}
while(!sell.empty()&&flag[sell.top().id].cancel) sell.pop();
while(!buy.empty()&&flag[buy.top().id].cancel) buy.pop();
printf("quote ");
if(buy.empty()) printf("%d %d",0,0);
else printf("%d %d",buycnt[buy.top().price],buy.top().price);
if(sell.empty()) printf(" - %d %d\n",0,99999);
else printf(" - %d %d\n",sellcnt[sell.top().price],sell.top().price);
}} return 0;}/*
50buy 1 1
buy 2 1
buy 1000 2
sell 500 1
sell 503 1
cancel 1
11buy 100 35
cancel 1
buy 100 34
sell 150 36
sell 300 37
sell 100 36
buy 100 38
cancel 4
cancel 7
buy 200 32
sell 500 30
*/
UVA1203Argus(優先佇列)
題目 uva1203argus 優先佇列 題目大意 給你多個專案,每個專案有它發生的週期和對應的q num值。現在要求給出前k個專案,時間優先,同一時刻發生的先輸出q num值小的。解題思路 先將這幾個專案排下順序,一開始這些專案的發生時間就是週期,按照時間優先和同一時刻的q num優先的原則將這個...
UVa 10603 BFS 優先佇列
題目鏈結 解題報告 lrj紫書中路徑尋找問題的例題。大部分細節書中都有說明,不再贅述。說一點自己的感想。書裡面說演算法的正確性不是顯然的,可是我覺得應該是顯然的吧?每次找到佇列裡dist值最小的狀態,以它來更新ans值,並且拓展其他狀態。假如當前我們找到了乙個恰好有某個瓶子裡的水為d公升的狀態p,現...
UVA 10954 貪心 優先佇列
貪心策略 每次選取最小的兩個數相加,將和作為新的數加入序列,再從裡面取兩個最小的數.直到只剩下乙個數。優先佇列正好對付這題。ps 以前在學校oj做過幾乎一毛一樣的這題 ac include includeusing namespace std priority queue,greater q the...