CCF 2014-12-3 컬렉션 가격 경쟁 100점

2541 단어
시험 문제 번호:
201412-3
시험 제목:
집합 가격 경쟁
시간 제한:
1.0s
메모리 제한:
256.0MB
문제 설명:
문제 설명 모 주식거래소는 개장 전 고객이 제출한 주문서에 따라 특정 주식의 개장 가격과 개장 거래량을 확정하는 프로그램을 작성해 주십시오.이 프로그램의 입력은 여러 줄로 구성되어 있으며, 매 행위마다 기록이 있으며, 기록은 다음과 같은 몇 가지가 있을 수 있다.buyps는 주식을 구매하는 매수를 표시하는데 한 손의 가격은 p이고 매수 주식의 수는 s이다.  2. sellps는 주식을 판매하는 매도서를 표시하는데 한 손의 가격은 p이고 매도 주식 수는 s이다.  3. canceli는 i행의 기록을 취소합니다.만약 개장가가 p0이라면 시스템은 최소한 p0의 가격을 제시한 모든 계산서와 최대 p0의 가격을 매칭할 수 있다.따라서 이때의 개장 거래량은 최소 p0의 매입 총주수와 많은 매입 금액이 p0인 매표소의 총주수 사이의 비교적 작은 값이다.너의 절차는 개장 가격을 정해서 개장 거래량이 가능한 한 많도록 해야 한다.만약 조건에 부합되는 개장가가 여러 개 있다면, 프로그램은 가장 높은 개장가를 출력해야 한다.입력 형식 입력 데이터는 여러 줄이 있고 한 줄마다 기록이 있습니다.합법적인 수입을 보장하다.주식 수는 108의 정수를 넘지 않고 가격은 적당한 소수점 뒤의 두 자리까지 정확한 정수이며 10000.00을 넘지 않는다.출력 형식은 두 개의 수를 포함하는 한 줄을 출력해야 하며, 공백으로 구분해야 한다.첫 번째는 개장가이고, 두 번째는 이 개장가 아래의 거래량이다.개장가는 소수점 뒤에 딱 두 자리까지 정확해야 한다.샘플 입력 buy 9.25 100 buy 8.88 175 sell 9.00 1000 buy 9.00 400 sell 8.92 400 cancel 1 buy 100.00 50 샘플 출력 9.00 450 평가 용례 규모와 약정 100% 데이터에 대해 입력한 줄 수는 5000을 초과하지 않습니다.
 
#include
#include
using namespace std;

typedef struct Node{
	string type;
	double p;
	int num;
}Node; 

Node rec[5001],buy[5001],sell[5001];

bool cmp_buy(Node a,Node b){
	return a.p>b.p;
}

bool cmp_sell(Node a,Node b){
	return a.p>str){
		if(str!="cancel"){
			cin>>rec[n].p>>rec[n].num;
			rec[n].type=str;
			n++;
		}else{
			int del;
			cin>>del;
			rec[n].type=str;rec[n].num=del;
			n++;
		}
	}
	
	for(int i=n-1;i>=0;i--){
		if(rec[i].type=="cancel"){
			if(rec[rec[i].num-1].type!="cancel"){//  !!!cancel    cancel,    buy sell 
				rec[rec[i].num-1].type="";
			}
		}else if(rec[i].type=="buy"){
			buy[bn]=rec[i];bn++;
		}else if(rec[i].type=="sell"){
			sell[sn]=rec[i];sn++;
		}
	}
	
	sort(rec,rec+n,cmp_buy);//           
	sort(buy,buy+bn,cmp_buy);//            
	sort(sell,sell+sn,cmp_sell);//            
	
	double p0,suc_p;
	long long buy_num=0,sell_num=0,temp_num=0,suc_num=0;
	for(int i=0;ip0)break;
			else sell_num+=sell[j].num;
		}
		if(sell_num>buy_num)temp_num=buy_num;
		else temp_num=sell_num;
		
		if(temp_num>suc_num){
			suc_num=temp_num;
			suc_p=p0;
		}
	}
	
	printf("%.2f %lld",suc_p,suc_num);
}

더 많은 관련 CCF 문항을 보려면 >>>CCF 과거 인증 문항을 클릭하십시오.

좋은 웹페이지 즐겨찾기