0138 - Track and Field Competition

#include <cstdio>
#include <iostream>
#include <map>
using namespace std;

void Slove(void)	{
	int number;
	double time;
	map<double,int> top, third;

	third.clear();
	for (int i=0; i<3; ++i)	{
		top.clear();
		for (int j=0; j<8; ++j)	{
			cin >> number >> time;
			top.insert( map<double,int>::value_type(time,number) );
		}
		int rank=0;
		for (map<double,int>::iterator it=top.begin(); it!=top.end(); ++it)	{
			if (rank < 2)	printf ("%d %.2lf\n", it->second, it->first);
			else	third.insert( map<double,int>::value_type(it->first,it->second) );
			++rank;
		}
	}
	map<double,int>::iterator it=third.begin();
	for (int i=0; i<2; ++i, ++it)
		printf ("%d %.2lf\n", it->second, it->first);
}

int main(void)	{
	Slove();
	return 0;
}

mapを用いる、数字の場合は必然的に昇順。
3組8人ずつに分けて上位2名の情報を表示、それ以外の選手情報を違うmapに代入。
最後に各3組上位2名ずつを除いた上位2名を表示。
~了~