• Just Arrange the Icons


    BerPhone X is almost ready for release with nn n applications being preinstalled on the phone. A category of an application characterizes a genre or a theme of this application (like "game", "business", or "education"). The categories are given as integers between 11 1 and nn n , inclusive; the ii i -th application has category c**ici c_i .

    You can choose mm m — the number of screens and ss s — the size of each screen. You need to fit all nn n icons of the applications (one icon representing one application) meeting the following requirements:

    • On each screen, all the icons must belong to applications of the same category (but different screens can contain icons of applications of the same category);

    • Each screen must be either completely filled with icons (the number of icons on the screen is equal to

    ss

    ) or almost filled with icons (the number of icons is equal to

    s−1s−1

    ).

    Your task is to find the minimal possible number of screens mm m .

    Input

    The first line contains an integer tt t (1≤t≤100001≤t≤10000 1 le t le 10,000 ) — the number of test cases in the input. Then tt t test cases follow.

    The first line of each test case contains an integer nn n (1≤n≤2⋅1061≤n≤2⋅106 1 le n le 2cdot10^6 ) — the number of the icons. The second line contains nn n integers c1,c2,…,c**nc1,c2,…,cn c_1, c_2, dots, c_n (1≤c**in1≤ci≤n 1 le c_i le n ), where c**ici c_i is the category of the ii i -th application.

    It is guaranteed that the sum of the values of nn n for all test cases in the input does not exceed 2⋅1062⋅106 2cdot10^6 .

    Output

    Print tt t integers — the answers to the given test cases in the order they follow in the input. The answer to a test case is an integer mm m — the minimum number of screens on which all nn n icons can be placed satisfying the given requirements.

    Example

    Input

    Copy

    3
    11
    1 5 1 5 1 5 1 1 1 1 5
    6
    1 2 2 2 2 1
    5
    4 3 3 1 2
    

    Output

    Copy

    3
    3
    4
    

    Note

    In the first test case of the example, all the icons can be placed on three screens of size 44 4 : a screen with 44 4 icons of the category 11 1 , a screen with 33 3 icons of the category 11 1 , and a screen with 44 4 icons of the category 55 5 .

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int INF=0x3f3f3f;
    const int N=1e6+5;
    //int num[2*N];
    vector<int>vt;
    int x[2*N];
    int main()
    {
        int t,n;
        //cin>>t;
        scanf("%d",&t);
    
        while(t--)
        {
           // cin>>n;
           vt.clear();
              int mi=INF,mx=-1,p;
        //int cnt=0;
          // cnt=0;
           scanf("%d",&n);
          //  memset(num,0,sizeof(num));
            memset(x,0,sizeof(x));
            for(int i=0;i<n;i++)
            {
                //cin>>num[i];
                scanf("%d",&p);
                x[p]++;
                mx=max(mx,p);
            }
            for(int i=0;i<=mx;i++)
            {
                if(x[i]==0) continue;
                else
                {
                  //num[cnt++]=x[i];
                  vt.push_back(x[i]);  //vector速度比数组快 ,用于统计数量
                  mi=min(mi,x[i]);
                }
            }
            int tot,r=0;
            int minn=INF;
    
                int ans=0;
                for(int i=1;i<=mi+1;i++)
                {
    
                    r=0;
                    ans=0;
                    //for(int j=0;j<cnt;j++)
                    for(auto X :vt)
                    {
                        tot=(X-1)/i+1;
                        if(X%i==0) ans+=X/i;
                        else if(X-tot*(i-1)>=0&&X-tot*i<=0) ans+=tot;
                        else
                        {
                           r=-1;
                           break;
                        }
                    }
                    if(r!=-1)
                        minn=min(minn,ans);
    
                }
                //cout<<ans<<endl;
                printf("%d
    ",minn);
        }
        return 0;
    }
    
    

    思路:

    image-20200905185131841

    x=(c-1)/s+1;

  • 相关阅读:
    Android随笔使用ViewPager实现简单地图片的左右滑动切换
    简单地Android中图片的三级缓存机制
    Java中怎么遍历map中value值 (转载)
    创建可执行的jar包
    写出优秀的java代码(转载)
    [JS脚本]ajax status 错误定义
    jsonlib 之jsonConfig详细使用(转载写的不错)
    Driver not found Error when sonar server is just not running
    使用Maven生成manifest
    ECMAScript 面向对象技术
  • 原文地址:https://www.cnblogs.com/xxffxx/p/13619230.html
Copyright © 2020-2023  润新知