#include<iostream>
#include<string>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
typedef long long ll;
class bidding_buy {
public:
int get_state() { return state_cancel; }
float get_price() { return price; }
int get_num() { return num; }
int get_number() { return number; }
void cancel(int x) { state_cancel = x;}
void input_price(float a) { price = a; }
void input_number(int b) { number = b; }
void input_numb(int c) { num = c; }
bidding_buy(){
state_cancel = 0;
}
private:
int state_cancel; //1为被取消,0为存在
float price;
int number;
int num;
};
class bidding_sell {
public:
bidding_sell(){
state_cancel = 0;
}
int get_state() { return state_cancel; }
int get_number() { return number; }
float get_price() { return price; }
int get_num() { return num; }
void cancel(int x) { state_cancel = x;}
void input_price(float a) { price = a; }
void input_number(int b) { number = b; }
void input_numb(int c) { num = c; }
private:
int state_cancel = 0; //1为被取消,0为存在
float price;
int number; //编号
int num; //购买数量
};
void SSort(double arry[],int n, bidding_sell X[])
{
double temp;
bidding_sell t;
for(int i=0; i<n; i++)
for(int j=0; j<n-i-1; j++)
{
if(arry[j] > arry[j+1])
{
t = X[j];
temp = arry[j];
X[j] = X[j+1];
X[j+1] = t;
arry[j] = arry[j+1];
arry[j+1] = temp;
}
}
}
void Sort(double arry[],int n, bidding_buy X[])
{
double temp;
bidding_buy t;
for(int i=0; i<n; i++)
for(int j=0; j<n-i-1; j++)
{
if(arry[j] > arry[j+1])
{
t = X[j];
temp = arry[j];
X[j] = X[j+1];
X[j+1] = t;
arry[j] = arry[j+1];
arry[j+1] = temp;
}
}
}
int main()
{
bidding_buy* X = new bidding_buy[1000];
bidding_sell* P = new bidding_sell[1000];
int i,j,k,temp,number,cancel,num,m,n; //i为循环使用,j为购买数组,k为出售数组
double buy[1000],sell[1000],A[1000], price;
int d=0;
double p=0;
string a;
number = 0;
j = k = 0;
while (cin >> a) {
number++;
//输入部分
if (a[0] == 'c')
{
cin >> cancel;
A[d] = cancel;
d++;
}
else if (a[0] == 'b')
{
cin >> price >> num;
X[j].input_price(price);
X[j].input_numb(num);
X[j].input_number(number);
buy[j] = price;
j++;
}
else if (a[0] == 's')
{
cin >> price >> num;
P[k].input_price(price);
P[k].input_numb(num);
P[k].input_number(number);
sell[k] = price;
k++;
}
else
break;
}
for(int W=0; W<d; W++) {
for (i = 0; i < j; i++) //寻找删除单号
{
if ( A[W]== X[i].get_number())
X[i].cancel(1);
}
for (i = 0; i < k; i++) //寻找删除单号
{
if (A[W] == P[i].get_number())
P[i].cancel(1);
}
}
Sort(buy,j, X); //购买数组排序
SSort(sell,k, P); //出售数组排序
ll m_sum = 0;
ll sumb=0, sums=0, sum=0; //买的总和, 卖的总和,sum取二者最小
for(int W=0; W<j; W++){
double p0 = buy[W];
sumb=0, sums=0;
for(i=0; i<j; i++)
if(X[i].get_state()==0 && X[i].get_price()>=p0)
sums += X[i].get_num();
for(i=0; i<k; i++)
if(P[i].get_state()==0 && P[i].get_price()<=p0)
sumb += P[i].get_num();
sum = min(sums, sumb);
if(sum >= m_sum){
m_sum = sum;
p = p0;
}
}
for(int W=0; W<k; W++){
double p0 = sell[W];
sumb = 0, sums = 0;
for(i=0; i<j; i++)
if(X[i].get_state()==0 && X[i].get_price()>=p0)
sums += X[i].get_num();
for(i=0; i<k; i++)
if(P[i].get_state()==0 && P[i].get_price()<=p0)
//这儿改为!=0 有30分
sumb += P[i].get_num();
sum = min(sums, sumb);
if(sum >= m_sum){//这个改为> 会有30分
m_sum = sum;
p = p0;
}
}
cout << fixed << setprecision(2) << p << " " << m_sum << endl;
return 0;
}