当前位置: 首页 > news >正文

题解:学而思编程 均富卡

【题目来源】

学而思编程:均富卡

【题目描述】

有一个数列 \(a_1,a_2,⋯ ,a_n\)。可以对它进行如下操作:

每次操作,选择数列的一个子序列(也可以是数列本身),将子序列中的数都改成它们的平均数。

例如数列 \([5,1,2,1]\),选择第 \(1\) 个数和第 \(3\) 个数,它们的平均数是 \(3.5\),所以操作后数列就会变成 \([3.5,1,3.5,1]\)

给出数列 \(a_1,a_2,⋯ ,a_n\) 和一个整数 \(x\),我们想要通过若干次操作,让尽可能多的数大于等于 \(x\)。问最多可以使多少个数大于等于 \(x\)?(操作的次数没有上限,也可以一次都不操作)

【输入】

输入包含多组数据。

\(1\) 行,\(1\) 个正整数 \(T\),表示有 \(T\) 组数据。

每组数据由两行组成:

\(1\) 行,包含两个整数 \(n,x\)

\(2\) 行,包含 \(n\) 个整数 \(a_1,a_2,⋯ ,a_n\)

【输出】

输出 \(T\) 行,对每组数据输出答案。

【输入样例】

4
4 3
5 1 2 1
4 10
11 9 11 9
2 5
4 3
3 7
9 4 9

【输出样例】

2
4
0
3

【核心思想】

  1. 问题分析:给定 \(n\) 个数的数列 \(a_1, a_2, \ldots, a_n\) 和目标值 \(x\),每次操作可以选择一个子序列,将其所有数改为它们的平均数。求最多能使多少个数 \(\geq x\)。这是一个排序 + 前缀和贪心问题,关键在于降序排序后,优先选择较大的数可以使平均值最大化。

  2. 算法选择

    • 降序排序策略:将数组从大到小排序,优先选择较大的元素
    • 前缀和贪心判定:依次累加前 \(i\) 个元素,检查平均值是否 \(\geq x\)
    • 贪心正确性:降序排序后,前 \(i\) 个元素是能使平均值最大的选择。如果前 \(i\) 个不满足,则任何包含 \(i\) 个元素的选择都不满足
  3. 关键步骤

    • 读取输入\(T\)(测试组数),每组 \(n, x\) 和数组 \(a[1..n]\)
    • 降序排序sort(a + 1, a + n + 1, greater<int>())
    • 前缀和贪心判定(遍历 \(i\)\(1\)\(n\)):
      • 累加前缀和tot += a[i]
      • 平均值判定:检查 tot / i >= x
      • 满足条件:继续下一个
      • 不满足条件:输出 \(i-1\)(前 \(i-1\) 个是最大满足个数)
    • 全部满足:如果遍历完都满足,输出 \(n\)
  4. 时间/空间复杂度

    • 时间复杂度:\(O(T \times n \log n)\),主要是排序复杂度,\(T\) 为测试组数
    • 空间复杂度:\(O(n)\),存储数组
  5. 排序前缀和贪心的核心思想

    • 降序排序:优先选择较大的元素,使前 \(i\) 个元素的平均值最大化
    • 前缀和累加:通过前缀和快速计算前 \(i\) 个元素的总和
    • 贪心判定:一旦前 \(i\) 个元素的平均值 \(< x\),说明继续加入更小的元素只会拉低平均值,因此前 \(i-1\) 个就是最优解
    • 单调性利用:降序排序后,平均值具有单调递减的性质,可以用一次遍历找到临界点
    • 适用于最大平均值、最优子集选择、阈值判定类问题

【算法标签】

贪心

【代码详解】

#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
int t, n, x, a[100005];signed main()
{cin >> t;while (t--){cin >> n >> x;for (int i = 1; i <= n; i++){cin >> a[i];}sort(a + 1, a + n + 1, greater<int>());  // 从大到小排序int tot = 0, flag = 1;  // tot: 前缀和, flag: 标记是否所有元素都满足条件for (int i = 1; i <= n; i++){tot += a[i];// 检查前i个元素的平均值是否>=xif (tot / i >= x){continue;}else{cout << i - 1 << endl;  // 输出满足条件的最大个数flag = 0;break;}}if (flag){cout << n << endl;  // 所有元素都满足条件}}return 0;
}

【运行结果】

4
4 3
5 1 2 1
2
4 10
11 9 11 9
4
2 5
4 3
0
3 7
9 4 9
3
http://www.zskr.cn/news/1523189.html

相关文章:

  • 2026湖州厂区电能质量测试评估放心机构 TOP + 实地测评 + 详细地址电话 - 中检检测集团
  • 2026昌吉地区本地人常去的 5 家土壤检测农田污染场地检测第三方机构实体店实地测评汇总 - 科信检测
  • 5分钟掌握猫抓Cat-Catch:浏览器资源嗅探神器的完整使用指南
  • 从/dev/fb0到DRM:一个嵌入式工程师的Linux显示框架踩坑与选型指南
  • 天花板!2026 实验室装修公司推荐 5大企业实力透视+ 全场景选型秘籍 - 速递信息
  • 题解:学而思编程 奶牛杂技团
  • 2026吉林本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • 2026贵阳厂区电能质量测试评估放心机构 TOP + 实地测评 + 详细地址电话 - 中检检测集团
  • AMD Ryzen处理器调校终极指南:5步解锁隐藏性能的免费工具
  • 2026喀什本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • 2026潜江市迪奥+古驰+普拉达包包专业回收,2026甄选回收店铺排行榜推荐 - 奢金汇
  • 2026日喀则市爱马仕+香奈儿+路易威登LV包包专业回收,2026甄选回收店铺排行榜推荐 - 奢金汇
  • 题解:AtCoder AT_awc0082_d Corridor Doors and Hit Points
  • 数据科学转行真实路径图:3条可落地的实战路线
  • 为你的STM32小屏幕找个GUI:在1.8寸TFT上移植LVGL或U8g2的实战记录
  • 2026揭阳厂区电能质量测试评估放心机构 TOP + 实地测评 + 详细地址电话 - 中检检测集团
  • 飞腾D2000+银河麒麟V10开发笔记:网络编程时获取本机IP的几种方法对比
  • 视频转PPT:如何从3小时会议录像中提取出完美演示文稿
  • 终极QQ音乐解密指南:3分钟解锁你的加密音乐库
  • dendrogram如何提升销售预测准确率:产品相似性建模实战
  • skill 知识
  • 用GPT-Builder打造Plotly地理可视化AI助手
  • 基于PLC控制的汽车铰链自动压装机虚拟样机设计3124(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 企业级SSD批量供货与品质一致性FAQ
  • DOTA数据集标注避坑指南:HBB和OBB选错了,模型效果差一半
  • 2026巴音本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • 2026汉中本地水质检测饮用水检测哪家强?TOP 正规机构榜单 + 联系方式 - 中安检测集团
  • Windows Cleaner:开源系统清理与优化工具技术解析
  • 软件保护器横评:WinLicense的SecureEngine®技术到底强在哪?与同类工具对比
  • WarcraftHelper完整教程:如何让经典魔兽争霸3适配现代硬件环境