Programación C ++ Ejercicios 042: juegos de lucha Sangre

la programación del Norte y algoritmos (c) Resumen cuestionario (primavera de 2020)


descripción

Con el fin de cumplir con los Juegos Olímpicos de 2008, por lo que entendemos mejor los diversos deportes de combate, de pienso abierto una nueva lucha contra los juegos de sangre. La lucha contra el sistema de afiliación juegos, pero los nuevos miembros no necesitan pagar la entrada, siempre y cuando jugar un partido de exhibición con un viejo miembros, para demostrar su fuerza.

Suponemos que la fuerza de combate puede ser un número entero positivo, el valor se convierte en fuerza. Además, cada persona tiene un identificador único, que es un entero positivo. Con el fin de hacer que el juego mejor, cada jugador elegirá una nueva fuerza con la raza humana más cercana, que es el valor absoluto de la diferencia entre el valor de la fuerza de ambos equipos lo más pequeña posible, si dos personas tienen el valor de resistencia de la diferencia con él mismo, que elegirá a su débil que (al parecer, el niño abusado que va a ser bueno).

Por desgracia, la Cortadora accidentalmente perdió el récord de la prueba, pero conserva los registros miembros registrados. Ahora usted por favor ayuda de pienso reanudar la reproducción de disco, por orden cronológico de la salida de cada juego entre los dos lados de identificación.

Introduzca
la primera línea de un número n (0 <n <= 100 000 ), el campo de la lucha contra indica el número de nuevos miembros (no incluyendo la cortadora). N cada fila tras fila de dos números, dada la fuerza de la ID y el valor de la adhesión de acuerdo con la composición del tiempo. A principio, de pienso incluso un miembro, id es 1, los valores de resistencia de 1 mil millones. Para asegurar que la fuerza diferente de los dos valores de entrada.

Salida de
N líneas de dos números, tanto el ID, novato Identificación EDITORIAL por juego.

entrada de la muestra

3
2 1
3 3
4 2

Ejemplo de salida

2 1
3 2
4 2

Directamente sobre el código

#include<iostream>
#include<map>
using namespace std;
int main()
{
	int id,power,num;
	multimap<int ,int> data;
	data.insert(make_pair(1000000000,1));//第一个数据 
	cin >> num;
	while(num --)
	{
		cin >> id >> power;
		multimap<int ,int>::iterator im,in,i,j;
		im = data.insert(make_pair(power,id));
		if(im == data.begin()){//判断是否是第一个元素
			in = im;
			in++;
		 	cout<<im->second <<" "<< in->second << endl;
		}
		else if(im == (--data.end())){//判断是否是最后一个元素
			in = im;
			--in;
			cout<<im->second <<" "<< in->second << endl;
		}
		else{
			i = im;
			--i;
			j = im;
			++j;
			if(im->first - i->first > (j->first - im->first))
				cout<<im->second <<" "<< j->second<<endl;
			else
				cout<<im->second <<" "<< i->second<<endl;
		}
		
	}
}
 
Publicados 222 artículos originales · ganado elogios 48 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/qq_44116998/article/details/104419768
Recomendado
Clasificación