結果
| 問題 | No.120 傾向と対策:門松列(その1) | 
| コンテスト | |
| ユーザー |  beet | 
| 提出日時 | 2018-10-05 16:48:01 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 54 ms / 5,000 ms | 
| コード長 | 538 bytes | 
| コンパイル時間 | 1,626 ms | 
| コンパイル使用メモリ | 176,076 KB | 
| 実行使用メモリ | 6,820 KB | 
| 最終ジャッジ日時 | 2024-10-12 12:35:13 | 
| 合計ジャッジ時間 | 2,762 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 4 | 
ソースコード
#include<bits/stdc++.h>
using namespace std;
using Int = long long;
//INSERT ABOVE HERE
signed main(){
  Int T;
  cin>>T;
  while(T--){
    Int n;
    cin>>n;
    vector<Int> x(n);
    for(Int i=0;i<n;i++) cin>>x[i];
    map<Int, Int> y;
    for(Int i=0;i<n;i++) y[x[i]]++;
    
    Int l=0,r=n+1;
    
    auto check=
      [&](Int d){
	Int res=0;
	for(auto p:y) res+=min(d,p.second);
	return res/3>=d;
      };
    while(l+1<r){
      Int m=(l+r)>>1;
      if(check(m)) l=m;
      else r=m;
    }
    cout<<l<<endl;
  }
  return 0;
}
            
            
            
        