当前位置: 首页 > 工具软件 > Thematic > 使用案例 >

codeforces 1077E Thematic Contests

堵凯
2023-12-01

题目:

传送门

题意:

给出一些题目的,其中有些题目是重复的,举办连续举办几场比赛,每次比赛的题目必须相同,但是一种题目只能举办一次比赛,而且后一场比赛的题目量必须是前一场的2倍,第一场比赛的题目量可以任意选择,之后的场比赛必须遵循上面的规则。

思路:

先对题目进行归类,即求出同一种题目的数量,然后排序,之后从初始一场到最多场开始找,在找的时候进行二分。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
typedef long long ll;
map<ll,int>ma;
const int maxn=2*1e5+5;
ll a[maxn];
ll Min=0x3f3f3f3f,Max=-1;
int n,num=0;
ll sum=0;
ll Judge (ll x)
{
    ll tsum=0,j=x;
    int pos=0;
    while (1)
    {
        pos=(lower_bound(a+1+pos,a+num+1,j)-(a+1));
        if(pos==num) break;
        pos++;
        tsum+=j;
        j<<=1;
    }
    return tsum;
}
int main()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        ll x;
        scanf("%lld",&x);
        if(ma[x]==0)
            ma[x]=++num;
        a[ma[x]]++;
    }
    sort(a+1,a+num+1);
    Min=a[1]; Max=a[num];
    ll l=Min,r=Max;
    for (ll i=1;i<=Max;i++)
    {
        sum=max(sum,Judge(i));
    }
    printf("%lld\n",sum);
    return 0;
}

 

 类似资料:

相关阅读

相关文章

相关问答