範例程式碼 uva11286

//uva11286
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
#include <cstdio>
#define NUM 5
#define LEN 20

using namespace std;

// P_jp禡 -  max_element() ϥ
bool isBig(map<string, int>::value_type &a, map<string, int>::value_type &b) {
	return (a.second < b.second);
}

int main() {
	int dataNum, courseNum[NUM], ans;
	map<string, int> course;
	map<string, int>::iterator max;
	char numInChar[LEN];
	string numInString;

	while(cin >> dataNum) {	// oǥͤH
		if(dataNum == 0)
			break;

		// initialize
		ans = 0;	// ̲׵
		course.clear();	// OsҦX{Lҵ{զX + ܸӽҵ{զXH

		for(int d = 0; d < dataNum; d++) {
			// oҵ{s
			for(int i = 0; i < NUM; i++)
				cin >> courseNum[i];

			// ƧǹL~P_sO_@P
			sort(courseNum, courseNum + NUM);

			// q int }Cন char }CAন string
			sprintf(numInChar, "%d%d%d%d%d", courseNum[0], courseNum[1], courseNum[2], courseNum[3], courseNum[4]);
			numInString = numInChar;

			// P_ map O_wX{L
			if(course.find(numInChar) == course.end())
				course[numInString] = 1;	// X{h 1
			else
				course[numInString]++;		// wX{h֥[
		}

		// X̦hH諸ҵ{զXXӤH
		max = max_element(course.begin(), course.end(), isBig);

		// XҦ̦hH諸ҵ{զXòέpH
		for(map<string, int>::iterator it = course.begin(); it != course.end(); it++) {
			if((*it).second == (*max).second)
				ans += (*max).second;
		}

		// X̲׵
		cout << ans << endl;
	}

	return 0;
}