题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息。
n、s、B、S
其中n代表委托信息个数,s为最热门的委托信息的个数,B代表买入、S代表卖出。最热门的委托:卖出时价格越高越热门,买入时价格越低越热门。
(其中:
输入时,
6 2,表示委托信息个数为6,输出其中最热门的买入与卖出信息各2条。
B 50 2,表示买入价格为50的股票,数量为2。
输出时,
合并价格一样的委托,依次输出买入与卖出委托中最热门的s条委托(先输出买入)
买入按价格升序输出,卖出按价格降序输出)
例如
输入:
6 2
B 50 2
S 50 1
S 20 2
S 30 1
B 40 4
B 50 6
输出:
B 40 4
B 50 8
S 50 1
S 30 1
我的代码:
import java.util.*;
import java.io.*;
public class Main implements Comparable<Main> {
private String type;
private int price;
private int num;
public int compareTo(Main that)
{
if(that.type.equals("B"))
{
if(this.price>that.price)return +1;
else if(this.price<that.price)return -1;
return 0;
}
if(that.type.equals("S"))
{
if(this.price>that.price)return -1;
else if(this.price<that.price)return +1;
return 0;
}
return 0;
}
public Main() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args)
{
int n=0;
int s=0;
int i=0;
int salenum=0;
int buynum=0;
int v=0;
int letter=0;
Scanner in=new Scanner(System.in);
n=in.nextInt();
s=in.nextInt();
Main[] aux1=new Main[n];
Map<Integer,Integer>salemap = new HashMap<Integer, Integer>();
Map<Integer,Integer>buymap = new HashMap<Integer, Integer>();
for(;i<n;i++)
{
aux1[i]=new Main();
aux1[i].type=in.next();
aux1[i].price=in.nextInt();
aux1[i].num=in.nextInt();
if(aux1[i].type.equals("S"))
{
if(salemap.get(aux1[i].price)==null)
{letter=aux1[i].num;}
else
{letter=salemap.get(aux1[i].price).intValue()+aux1[i].num;}
salemap.put(aux1[i].price,letter);
}
else if(aux1[i].type.equals("B"))
{
if(buymap.get(aux1[i].price)==null)
{letter=aux1[i].num;}
else
{letter=buymap.get(aux1[i].price).intValue()+aux1[i].num;}
buymap.put(aux1[i].price,letter);
}
}
salenum=salemap.size();
buynum=buymap.size();
Main[] buy=new Main[buynum];
Main[] sale=new Main[salenum];
int t1=0;int t2=0;
for(int x=0;x<i;x++)
{
if(aux1[x].type.equals("B"))
{
if(buymap.containsKey(aux1[x].price))
{
buy[t1]=new Main();
v=buymap.get(aux1[x].price).intValue();
buy[t1].type="B";
buy[t1].price=aux1[x].price;
buy[t1].num=v;
buymap.remove(aux1[x].price);
t1++;
}
}
else
{
if(salemap.containsKey(aux1[x].price))
{
sale[t2]=new Main();
v=salemap.get(aux1[x].price).intValue();
sale[t2].type="S";
sale[t2].price=aux1[x].price;
sale[t2].num=v;
salemap.remove(aux1[x].price);
t2++;
}
}
}
Arrays.sort(sale);
Arrays.sort(buy);
for(i=0;i<Math.min(buynum,s);i++)
{
System.out.print(buy[i].type+" ");
System.out.print(buy[i].price+" ");
System.out.print(buy[i].num);
System.out.println();
}
for(i=0;i<Math.min(salenum,s);i++)
{
System.out.print(sale[i].type+" ");
System.out.print(sale[i].price+" ");
System.out.print(sale[i].num);
System.out.println();
}
}
}
感觉代码量太大,虽然实现了功能,但是写的比较麻烦,如果大家有更简单的写法,欢迎指教。