血液格闘ゲーム:C ++プログラミング042演習します

北プログラミングとアルゴリズム(C)クイズの概要(2020年春)


説明

私たちはより良い様々な格闘技を理解するように、2008年のオリンピックを満たすために、フェーサ新しい血格闘ゲームを開きました。ゲームの会員システムを戦うが、新しいメンバーが彼らの強さを証明するために、古いメンバーとエキシビジョンマッチをプレイする限り、入場料を支払う必要はありません。

私たちは、戦闘力は正の整数を指定でき、値が強さになっていることを前提としています。また、それぞれの人が、一意のIDを持っている、それは正の整数です。より良いゲームの外観を作るために、各プレイヤーは二人が彼と同じに違いの強さの値を持っている場合には、可能な限り小さく、両チームの強さの値との差の絶対値であり、彼の最も近い人類と新しい強さを選択します、彼は(、明らかに良いだろう虐待を受けた子)よりも彼の弱いを選択します。

残念ながら、表面材は、誤ってレースレコードを失ったが、彼はレコードの登録メンバーを保持します。今、あなたは、双方のIDと各ゲームの出力の時系列順に、レコードを再生し、ヘルプ表面材の履歴書を喜ばせるでしょう。

入力した
番号の最初の行をN(0 <N <= 100000 )、 戦闘フィールドは(フェーサ含まない)新会員の数を示します。N 2つの数の行後の各行は、IDの強度と時間のメンバーシップに応じてメンバーシップの値を与えられ。最初、フェイサーさえ部材は、IDは、10億の強度値1です。二つの入力値と異なる強度を確保します。

出力
N 2つの数の行、ゲームごとのID、IDの初心者EDITORIAL両方。

サンプル入力

3
2 1
3 3
4 2

サンプル出力

2 1
3 2
4 2

直接コードに

#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;
		}
		
	}
}
 
公開された222元の記事 ウォン称賛48 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_44116998/article/details/104419768