• Codeforces Round #143 (Div. 2)231CTo Add or Not to Add


    http://codeforces.com/problemset/problem/231/C

    题意求一个序列中出现次数最多的数和它的次数,并且允许对这个序列中的数进行K次加1或不加

    分析:一开始看这题就想到是排序加二分,但是不知道怎么二分,哎还是太弱。。。看了下别人的题解是二分答案,就是出现的次数。

    View Code
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define MOD 100057
    #define MAXN 100050
    using namespace std;
    int a[MAXN];
    long long s[MAXN];
    int n,k;
    int check(int x){
        for(int i=x;i<=n;i++){
            if((long long)a[i]*x-(s[i]-s[i-x])<=k)return i;
        }
        return -1;
    }
    int main()
    {
        while(~scanf("%d%d",&n,&k)){
            int aa;
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
            }
            sort(a+1,a+n+1);
            s[0]=0;
            for(int i=1;i<=n;i++)
            s[i]=s[i-1]+a[i];
            int l=1,r=n;
            int ans;
            int ansa;
            while(l<=r){
                int mid=(l+r)>>1;
                int t=check(mid);
                if(t==-1)r=mid-1;
                else {
                    ans=t;l=mid+1;
                    ansa=mid;
                }
            }
            printf("%d %d\n",ansa,a[ans]);
        }
        return 0;
    }
  • 相关阅读:
    hibernate映射-单向多对一映射
    CSS
    HTML基础
    复习
    元类,单例
    数据类型,约束,存储引擎
    数据库概念,安装,基本操作
    IO模型
    异步回调,协程
    GIL锁,线程池,同步异步
  • 原文地址:https://www.cnblogs.com/arbitrary/p/2714912.html
Copyright © 2020-2023  润新知