题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息。
n、s、B、S
其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入、S代表卖出,S条卖出按照从小到大,买入按照从大到小。
输出:
6 2
B 50 2
S 50 1
S 20 2
S 30 1
B 40 4
B 50 6
输出:
B 50 8
B 40 4
S 20 2
S 30 1
(备注:6代表委托信息的个数、2代表表示买入和卖出委托信息各返回2个 ,其中每行如“B 50 2",第一个字段B代表买入,S代表卖出,50代表价格,最后一个字段代表数量)
思路:排序,合并同类型,然后输出。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt()){
int N=sc.nextInt();
int M=sc.nextInt();
List<TS> list1=new ArrayList<TS>();
List<TB> list2=new ArrayList<TB>();
for(int index=0;index<N;index++){
String type=sc.next();
int price=sc.nextInt();
int num=sc.nextInt();
if(type.equals("S")){
TS t=new TS(type,price,num);
list1.add(t);
}else{
TB t=new TB(type,price,num);
list2.add(t);
}
}
List<TS> listrs=new ArrayList<TS>();
List<TB> listrb=new ArrayList<TB>();
Collections.sort(list1);// 排序
if(list1.size()>0){//合并相同类型
listrs.add(list1.get(0));
int count=0;
for(int i=1;i<list1.size();i++){
if(list1.get(i).price==list1.get(i-1).price){
listrs.get(count).num+=list1.get(i).num;
}else{
listrs.add(list1.get(i));
count++;
}
}
}
Collections.sort(list2);//如上操作
if(list2.size()>0){
listrb.add(list2.get(0));
int count=0;
for(int i=1;i<list1.size();i++){
if(list2.get(i).price==list2.get(i-1).price){
listrb.get(count).num+=list2.get(i).num;
}else{
listrb.add(list2.get(i));
count++;
}
}
}
if(listrs.size()<M){
for(int i=0;i<listrs.size();i++){
System.out.print(listrs.get(i).type+" "+listrs.get(i).price+" "+listrs.get(i).num);
System.out.println();
}
}else{
for(int i=0;i<M;i++){
System.out.print(listrs.get(i).type+" "+listrs.get(i).price+" "+listrs.get(i).num);
System.out.println();
}
}
if(listrb.size()<M){
for(int i=0;i<listrb.size();i++){
System.out.print(listrb.get(i).type+" "+listrb.get(i).price+" "+listrb.get(i).num);
System.out.println();
}
}else{
for(int i=0;i<M;i++){
System.out.print(listrb.get(i).type+" "+listrb.get(i).price+" "+listrb.get(i).num);
System.out.println();
}
}
}
}
}
class TB implements Comparable<TB>{
String type;
int price;
int num;
public TB(String t,int p,int n){
this.type=t;
this.price=p;
this.num=n;
}
public int compareTo(TB t){
if(this.price>t.price){
return -1;
}else if(this.price<t.price){
return 1;
}else{
return 0;
}
}
}
class TS implements Comparable<TS>{
String type;
int price;
int num;
public TS(String t,int p,int n){
this.type=t;
this.price=p;
this.num=n;
}
public int compareTo(TS t){
if(this.price>t.price){
return 1;
}else if(this.price<t.price){
return -1;
}else{
return 0;
}
}
}