摘要: 寫個kd-tree模板...無它UPD: 以前寫的代碼太難看啦,趁去南京賽區之前整理模板重寫了一下...
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 //hdu4347 KD Tree&n... 閱讀全文
摘要: 題目來源:古老的智力題請回答下面10個問題,你的回答應保證每題惟有你的選擇是正確的。(1)第一個答案是b的問題是哪一個?(a) 2 (b) 3 (c) 4 (d) 5 (e) 6(2)恰好有兩個連... 閱讀全文
因為題目數據較小,所以可以直接模擬。
每讀入一個命令所要進行的操作:
如果是buy,則該種價格的買入數+ni,將該種價格加入到買入價格的集合中。
如果是sell,則該種價格的賣出數+mi,將該種價格加入到賣出價格的集合中。
然后進行銷售的操作:
比較最低的賣出價格和最高的買入價格,
如果前者小于等于后者則:
設最低賣出價格的賣出數為a,最高買入價格的買入數為b.
則a=a-min(a,b),b=b-min(a,b)
如果其中賣出數變為0,則在賣出價格集合中刪去該種賣出價格。買入數同理。
記錄股票價格
------------------------------------------------------------------------------------------------------
直到最低的賣出價格比最高的買入價格要高或者其中一個集合為空時跳出。
將余下來最低的賣出數不為0的賣出價格輸出,如果賣出價格集合為空就輸出”-”
買入價格同理,最后再輸出股票價格
這樣就完成了一次命令的操作
注意賣出價格集合為空和買入價格集合為空時的情況
代碼如下:
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 }
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 }
摘要: 感謝會長君的指導...現在格式應該正常了... 題目大意:給出一種叫做“大王鮑”的桌游,給出游戲規則和雙方起始的位置,問先走一方能否獲勝...如果不能,問在先走一方走后,后手一方有無必勝策略。 如卓峰君所言...是一道神模擬題...把規則全都寫對了就好... 判斷白贏的方法:檢測棋盤邊上有沒有黑色棋子;如果有,往六個方向搜尋,記錄連成一線的黑色棋子數目;如果黑色棋子數... 閱讀全文