Candy Machine--前缀和&&二分查找

2023-11-03

任意门

JB loves candy very much.

One day, he finds a candy machine with N candies in it. After reading the instructions of the machine, he knows that he can choose a subset of the N candies. Each candy has a sweet value. After JB chooses the subset, suppose the average sweet value of the chosen candies is X, all the candies with sweet value strictly larger than X will belong to JB. After JB makes the choice, the machine will disappear, so JB only has one opportunity to make a choice.

JB doesn’t care how sweet the candies are, so he just wants to make a choice to maximize the number of candies he will get. JB has been fascinated by candy and can’t think, so he needs you to help him.

Input
The first line contains one integer N (1≤N≤106), denoting the number of candies in the machine.

The second line contains N integers a1,a2,…,aN (1≤ai≤109), denoting the sweet values of the candies.

Output
One integer, denoting the maximum number of candies JB can get.

Example
input

5
1 2 3 4 5

output

2
#include <bits/stdc++.h>
 
using namespace std;
typedef long long LL;
const int N = 1e6+10;
LL n;
LL a[N];
// 小数会拉低平均值
// 只可能因为大数导致获取的糖果数量少
// 默认选取所有的糖果,往下逐步推翻前面的结果
 
LL get_ans(int l, int r, LL sum)
{
    // 找到第一个小于//这里也可以用upper_bound来写
    int len = r-l+1;
    LL res = 0;
    int ll = l, rr = r;
    while(ll < rr)
    {
        int mid = ll + rr >> 1;
        if(sum < a[mid]*len)
        {
            rr = mid;
        }
        else {
            ll = mid+1;
        }
    }
    if(sum < a[ll]*len) return r - ll + 1;
    return 0;
}
 
int main()
{
    scanf("%lld", &n);
    LL sum = 0;
    for(LL i = 1; i <= n; i++)
    {
        scanf("%lld", &a[i]);
        sum += a[i];
    }
    // 对数据从小到大排序
    sort(a+1, a+n+1);
    // 默认添加所有元素
    LL ans = get_ans(1, n, sum);
 
    for(int i = n; i > 0; i--)
    {
        sum -= a[i];
        ans = max(ans, get_ans(1, i-1, sum));
    }
    printf("%lld", ans);
 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Candy Machine--前缀和&&二分查找 的相关文章

  • hdu 5831 Rikka with Parenthesis II 2016 Multi-University 8

    Problem acm hdu edu cn showproblem php pid 5831 题意 给个括号序列 问能不能通过一次把两个不同位置的符号交换的操作 使得序列里的所有括号左右配对合法 分析 左括号进栈 如果是右括号而且栈顶是左

随机推荐

  • Linux性能监控命令_sar & 自动保存30天历史信息

    简介 sar命令将操作系统中选定的累积活动计数器的内容写入标准输出 计费系统根据 count 和 interval参数中的值 以秒为单位 按照指定的时间间隔写入指定次数的信息 目录 1 语法 1 1 常用参数 2 常见用法 2 1 监控CP
  • HTTP->WebRTC演进路径

    first HTTP Pre AJAX 原始web 一页里发送请求后才返回另一页 如Geocities second AJAX 2004 更新页面不需要刷新 如GMail third Web Sockets 2008 页面能建立双向通信 通
  • Android 10 暗黑模式适配,你需要知道的一切

    在 Android 10 里 Dark theme 暗黑模式得到了系统级的支持 暗黑模式不仅酷炫 而且有降低屏幕耗电 在光线较暗的环境中使用更舒适等好处 今天带大家看一下如何适配暗黑模式 本文会从以下几点进行介绍 动态开启暗黑模式 使用 D
  • 解密IP地址的不同潜力与应用场景

    作为专业爬虫代理供应商 我们经常需要面对不同的IP地址需求 在IP地址选择中 动态IP和静态IP是两个常见的选项 但究竟什么是动态IP和静态IP 它们有什么区别和优势 适用于哪些场景 本文将为你详细解答 让你对IP地址有更全面的了解 第一部
  • html文字图片同一行,CSS控制图片和文字在同一行显示且对齐的3种方法

    CSS控制图片和文字在同一行显示且对齐的3种方法 在 HTML 代码中 有时会需要在文字旁边加上一个图标 默认情况 是图片置顶对齐 文字置底对齐 所以通常图片高 文字低 不能水平居中对齐 常见欢思中属餐显近和想都性厅示近和想都性厅示方法有3
  • Java并发JUC集合类

    文章目录 Java并发JUC集合类 为什么HashTable慢 它的并发度是什么 ConcurrentHashMap在JDK1 7和JDK1 8中实现有什么差别 JDK1 8解決了JDK1 7中什么问题 ConcurrentHashMap
  • Java jinfo 命令详解

    jinfo 命令可以用来查看 Java 进程运行的 JVM 参数 命令如下 root admin jinfo help Usage jinfo option
  • 40 多名直接下属、从不 1 对 1 沟通,老黄如此管理下的英伟达能在 AI 芯片领域称霸多久?...

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • It's Not Just Standing Up: Patterns of Daily Stand-up Meetings

    It s Not Just Standing Up Patterns of Daily Stand up Meetings Jason Yip ThoughtWorks Inc jcyip thoughtworks com http mar
  • VScode launch.json和tasks.json文件的配置

    task json version 2 0 0 command g args g file o file exe 编译命令参数 problemMatcher owner cpp fileLocation relative workspace
  • 高效的学习方法(费曼学习方法)

    学习技巧有四个简单的步骤 1 提取书本信息 阅读并理解 拿出一张白纸简要概括知识点以及对知识点进行深度拓展和横向拓展 深度拓展指增强知识点的理解深度 可以通过提问题的方式加强深度理解 横向拓展指增强其阅读广度 通过与其他学科建立关联 2 在
  • #pragma once和#ifndef / #define / #endif的区别

    转摘自 http www 360doc com content 10 0124 00 722458 14261695 shtml pragma once 指令格式如下 pragma once这是一个比较常用的指令 只要在头文件的最开始加入这
  • 华为OD机试 - 跳房子II(Java)

    题目描述 跳房子 也叫跳飞机 是一种世界性的儿童游戏 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格 然后获得一次选房子的机会 直到所有房子被选完 房子最多的人获胜 跳房子的过程中 如果有踩线等违规行为 会结束当前回合 甚至可能
  • c++什么时候使用new,调用构造函数

    new 补充 构造函数的调用 对象 可以调用成员函数 不可以调用构造函数 我们无法像调用成员函数那样使用对象来调用构造函数 因为在构造函数构造出对象之前 对象是不存在的 因此构造函数被用来创建对象 而不能通过对象来调用 详见 构造函数的4种
  • 三台机器搭建redis集群过程及问题记录

    文章目录 1 前言 2 搭建集群 3 遇到的问题 4 相关文章 1 前言 Redis版本 5 0 4 服务器版本 Linux CentOS 6 CentOS 7 CentOS 9 redis集群需要至少要三个master节点 我们这里搭建三
  • prometheus 服务发现原理

    服务发现 概述 如上图 Prometheus核心功能包括服务发现 数据采集和数据存储 服务发现模块专门负责发现需要监控的目标采集点 target 信息 数据采集模块从服务发现模块订阅该信息 获取到target信息后 其中就包含协议 sche
  • selenium+python:Excel 存储数据,在已存在的Excel修改写入数据 并保存

    三 Excel文件的写入 思路 新建Excel表格 新增该表格的工作表 根据指定的行和列写入数据 保存Excel表格 参考链接 http www cnblogs com chjbbs p 4153239 html 具体代码如图 4 所示 4
  • MyBatis学习(四):MyBatis使用代理方法(接口)实现数据库的操作

    在第一篇简单的mybatis示例中 我们简单的介绍了如何通过SQL映射文件来实现对数据库的操作 在对数据库操作的时候是采用上图中的1 2来实现对数据库的操作 见上图就可以实现对数据库的操作了 但是这样做还是不太方便 有没有更好的方法呢 接口
  • 基于流计算 Oceanus(Flink) CDC 做好数据集成场景

    由于第一次做实时 所以踩坑比较多 见谅 测试环境用的flink 小公司没有用到hadoop组件 一 踩坑记录 1 本地代码的flink版本是flink1 15 4 生产环境是flink1 16 1 在使用侧输出流时报错 需要使用以下写法 需
  • Candy Machine--前缀和&&二分查找

    任意门 JB loves candy very much One day he finds a candy machine with N candies in it After reading the instructions of the