# 題目: UVa 11286 – Conformity
# 題目說明
Waterloo大學的新生因為興趣不同,而選擇不同的課
但學校希望他們選的課能盡量一樣,所以設置了一個獎項
- 最受歡迎的課程組合
寫一個程式找出最受歡迎的課程組合
INPUT:
每筆資料第一行為一個整數n,代表學生人數
接下來會有n行,每行有五個整數,代表選的課程
當n為0時結束程式
OUTPUT:
輸出最受歡迎的課程組合的人數
如果有多個最受歡迎的課程組合,則將人數加總
# 解題方法
先將每個課程組合排序,之後連接起來存入string
將string存入map計算數量,數量最多的組合即為最受歡迎的課程組合
# 參考程式碼
#include <iostream>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n, max_num, total;
map<string, int> course;
vector<string> class_num;
string input, line;
while (cin >> n && n != 0) {
max_num = 0;
total = 0;
course.clear();
while (n--) {
line.clear();
class_num.clear();
for (int i = 0; i < 5; ++i) cin >> input, class_num.push_back(input);
sort(class_num.begin(), class_num.end());
for (int i = 0; i < 5; ++i) line += class_num[i];
++course[line];
}
for (auto it = course.begin(); it != course.end(); ++it)
if (it->second > max_num) max_num = it->second;
for (auto it = course.begin(); it != course.end(); ++it)
if (it->second == max_num) total += max_num;
cout << total << endl;
}
return 0;
}