Ejercer 5_14 uva1598 Exchange (querer ver el significado de las preguntas frotar viene en)

Decir que lo siento, que escribió el código de un desordenado bits, por lo que hay tiempo para volver el cambio, aunque el AC
hablar de las ideas, después de que él se olvidó ... para evitar
este problema, principalmente Título significa varios conjuntos de datos, una gran cantidad de cada transacción, si en este momento compra, hallazgo precio más bajo que el precio de su corazón, compra, venta, encontró más alto que su cuenta el precio, venta, compra o si no se vende a cabo, el resto se quedó esperando,
si al comprar o vender ella, encontrar a alguien para hacer una oferta de la misma, entonces el número de orden de llegada, primero (para evitar la pérdida de vidas que causan).
Si existe la supresión de un número de los primeros comandos (para asegurar que sólo la compra abolición o vender), independientemente de si ese comando ejecutado, la abolición de todo, que claramente, que no prevé la ejecución de control terminado, y no llevar a cabo la tarjeta, realice la mitad (no es objeto de comercio, pero el resto) también están fuera del resto de la tarjeta.
Si entonces el siguiente puede ser objeto de comercio, el número de precio de salida de la primera transacción (compra definitivamente comprar desde pequeñas a grandes), (descendente desde luego vender a vender)
cada una cotización instrucción dejó de comprar el derecho de vender, si en este momento a la izquierda Mo era salida 00 personas, el lado derecho de la producción Luka 099,999 personas
como ha ido ...
ideas: el comienzo de una línea 200 a más de T ... cada vez es más violencia sobre la supresión de directa de eliminación, abrir un vector delante de la totalidad de venir, de eliminación completar toda la parte posterior, y busque el número de salida también vienen con todo un vector todo a partir ...
de hecho, si se quiere eliminar, primero puede marcar que no existe en la línea, por cierto elimina como cada vez que se lleva a cabo la venta de compra,
pero después del primer hallazgo de su cola de prioridad mismo número de serie de precios, justo en frente de la matriz abierta, cuántos existen a cada precio en la línea ... el número de compra y venta de depósito por separado ... y luego la simulación se ha ido
, sino porque plato, por lo que no se puede poner dos cosas muy similares a la función del todo, sólo se copia y pega ,,, por lo que a continuación, cambiar de nuevo ... Gracias por ver disparate

#include <bits/stdc++.h>
using namespace std;
const int MA = 1e5 + 5;
const int MM = 1e6 + 6;
struct buy {
	int num,prize,bian;
	bool operator <(const buy b)const {
		if(this-> prize == b.prize) return this->bian > b.bian;
		return this-> prize < b.prize;  //高在前 
	}
}wz;
struct sell {
	int num,prize,bian;
	bool operator <(const sell b)const {
		if(this-> prize == b.prize) return this->bian > b.bian;
		return this-> prize > b.prize; // 低在前 
	}
}qw;
int bma[MA],bpz[MA],bsz[MA],bpf[MA],mlpb[MM],mlps[MM];
int main()
{
	
	int n,j; char s[10];
	int kase = 0;
	while(scanf("%d",&n)== 1 && n)
	{
		if(kase)  printf("\n");
		int sz,pz;
		priority_queue <buy> de; priority_queue <sell> chu;
		memset(bma,0,sizeof(bma));
		memset(bpz,0,sizeof(bpz));
		memset(bsz,0,sizeof(bsz));
		memset(bpf,0,sizeof(bpf));
		memset(mlpb,0,sizeof(mlpb));
		memset(mlps,0,sizeof(mlps));
		//初始化 
		for (int i = 1; i <= n; i++)
		{
			//加数 
			cin>>s;
			if(s[0] == 'B' || s[0] == 'S')  //买或者卖 
			{
				scanf("%d%d",&sz,&pz);
				if(s[0] == 'B')    //买 
				{
					while(!chu.empty() && !bma[chu.top().bian]) chu.pop();
					while(!chu.empty())  //清空没用的 
					{						
						qw = chu.top();
						if(qw.prize > pz) 
						{
							break; // 莫得谈
						}
						else 
						{
							if(qw.num > sz) 
							{
								chu.pop();
								qw.num -= sz;  bsz[qw.bian] -=sz;
								mlps[qw.prize] -=sz; // 三个地方要减 
								printf("TRADE %d %d\n",sz,qw.prize);
								sz = 0;
								chu.push(qw);
								break;
							}
							else
							{
								chu.pop();
								sz -=qw.num;  
								mlps[qw.prize] -=qw.num;
								printf("TRADE %d %d\n",qw.num,qw.prize);
							    bma[qw.bian] = 0;
							}
						} 
						while(!chu.empty() && !bma[chu.top().bian]) chu.pop();
					}
					if(sz){
						wz.num = sz; wz.prize = pz; wz.bian = i;
						de.push(wz); bma[i] = 1;
						bpz[i] = pz; bsz[i] = sz; bpf[i] = 1;
						mlpb[pz]+=sz; 
					}
				}
				else   // 卖 
				{
					while(!de.empty() && !bma[de.top().bian]) de.pop();
					while(!de.empty())
					{ 
						wz = de.top();
						if(wz.prize < pz) 
						{
							break; // 莫得谈
						}
						else 
						{
							if(wz.num > sz)
							{
								de.pop();
								wz.num -= sz; bsz[wz.bian] -=sz;
								mlpb[wz.prize] -=sz;
								printf("TRADE %d %d\n",sz,wz.prize);
								sz = 0;
								de.push(wz);
								break;
							}
							else
							{
								de.pop();
								sz -= wz.num; mlpb[wz.prize] -=wz.num;
								printf("TRADE %d %d\n",wz.num,wz.prize);
								bma[wz.bian] = 0; 
							}
						} 
						while(!de.empty() && !bma[de.top().bian]) de.pop();
					}
					if(sz){
						   qw.num = sz; qw.prize = pz; qw.bian = i;
						   chu.push(qw); bma[i] = 1; 
						   bpz[i] = pz; bsz[i] = sz; bpf[i] = 0;
							mlps[pz]+=sz;
					}
				}
				
			}
			else
			{
				int ma;   scanf("%d",&ma);
				if(bma[ma]){
					bma[ma] = 0;
						if(bpf[ma] == 1) mlpb[bpz[ma]] -=bsz[ma];
							else             mlps[bpz[ma]] -=bsz[ma];
				}
			}
			//找数 
				while(!de.empty() && !bma[de.top().bian]) de.pop();
				while(!chu.empty() && !bma[chu.top().bian]) chu.pop();
				int a1,a2,b1,b2;
				if(de.empty()){
					a1 = 0; a2 = 0;
				}			
				else {
					a2 = de.top().prize; a1 = mlpb[de.top().prize];
				}
				if(chu.empty()){
					b1 = 0; b2 = 99999;
				}
				else {
					b2 = chu.top().prize; b1 = mlps[chu.top().prize];
				}				
				printf("QUOTE %d %d - %d %d\n",a1,a2,b1,b2); 
		}
		kase++;
	}
	return 0;
}
Publicado 55 artículos originales · ganado elogios 1 · vistas 2644

Supongo que te gusta

Origin blog.csdn.net/qq_37548017/article/details/100575786
Recomendado
Clasificación