posts - 4,  comments - 0,  trackbacks - 0
     摘要: 写个kd-tree模板...无它UPD: 以前写的代码太难看啦,趁去南京赛区之前整理模板重写了一下... Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  1 //hdu4347 KD Tree&n...  阅读全文
posted @ 2012-08-13 22:35 NKU->lkjslkjdlk 阅读(665) | 评论 (0)编辑 收藏
     摘要: 题目来源:古老的智力题请回答下面10个问题,你的回答应保证每题惟有你的选择是正确的。(1)第一个答案是b的问题是哪一个?(a) 2    (b) 3    (c) 4    (d) 5    (e) 6(2)恰好有两个连...  阅读全文
posted @ 2012-01-19 19:59 NKU->lkjslkjdlk 阅读(211) | 评论 (0)编辑 收藏
因为题目数据较小,所以可以直接模拟。
每读入一个命令所要进行的操作:
如果是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 }


posted @ 2011-10-11 00:50 NKU->lkjslkjdlk 阅读(266) | 评论 (0)编辑 收藏
     摘要: 感谢会长君的指导...现在格式应该正常了... 题目大意:给出一种叫做“大王鲍”的桌游,给出游戏规则和双方起始的位置,问先走一方能否获胜...如果不能,问在先走一方走后,后手一方有无必胜策略。 如卓峰君所言...是一道神模拟题...把规则全都写对了就好... 判断白赢的方法:检测棋盘边上有没有黑色棋子;如果有,往六个方向搜寻,记录连成一线的黑色棋子数目;如果黑色棋子数...  阅读全文
posted @ 2011-10-11 00:39 NKU->lkjslkjdlk 阅读(734) | 评论 (0)编辑 收藏
<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜