北プログラミングとアルゴリズム(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;
}
}
}