#include #include #include #include #include #include using namespace std; using Info = pair; // (残存数, 竹の長さ) int main() { int t; cin >> t; while (t--) { int n; cin >> n; map bamboos; for (int i = 0; i < n; i++) { int l; cin >> l; bamboos[l]++; } priority_queue, greater> que; int ans = 0; while (true) { for (auto it = bamboos.begin(); it != bamboos.end(); it++) { Info new_info = make_pair(it->second, it->first); if (que.size() < 3) { que.push(new_info); } else { Info bigger_info = max(new_info, que.top()); que.pop(); que.push(bigger_info); } } if (que.size() == 3) ans++; else break; while (!que.empty()) { Info info = que.top(); que.pop(); int len = info.second; bamboos[len]--; // 竹が存在しなくなったならば削除 if (bamboos[len] == 0) { bamboos.erase(len); } } } cout << ans << endl; } return 0; }