上海计算机学会 2023年10月月赛 乙组T2 社团展示(贪心、思维、二分答案)

第二题:T2社团展示

标签:贪心、思维、二分答案
题意:给定 n n n个社团,第 i i i个社团 x i x_i xi名学生,需要去完成作品。每件作品得有至少 m m m个不同的社团成员合作完成,每个同学只能参与一个作品,求最多完成作品数量。
题解 1(部分正确):比较容易想到一个贪心策略:每次用人数最多的 m m m个社团去完成 m i n { a i } min \{a_i \} min{ai}个作品,可以通过优先队列去维护,每次拿出人数最多的 m m m个社团,能够形成的作品数目是当前拿出的 m m m个社团中最少人数那个社团,都减一下,然后扔回优先队列,不断模拟这个过程,直到优先队列中的社团个数不够 m m m个。
测了下,发现只有部分正确,思考一下这个策略问题出在哪?
可以看看以下这个样例:

6 2
8 8 9 10 1 4 

序列:10 9 8 8 4 1
第一轮:10 9,答案9,序列变成:8 8 4 1 1
第二轮:8 8,答案 9 + 8,序列变成:4 1 1
第三轮:4 1,答案 9 + 8 + 1,序列变成:3 1
第四轮:3 1,答案 9 + 8 + 1 + 1,序列变成:2,最终答案为:19
但是实际上有更多完成数量的选择:
第一轮:8 9,答案 8,序列变成:10 8 4 1 1
第二轮:10 8,答案 8 + 8,序列变成:4 2 1 1
第三轮:4 2,答案 8 + 8 + 2,序列变成:2 1 1
第四轮:2 1,答案 8 + 8 + 2 + 1,序列变成:1 1
第五轮:1 1,答案 8 + 8 + 2 + 1 + 1,最终答案为 20

以上推理得到这个贪心策略是错误的。
代码 1

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
priority_queue<ll> q;
ll a[100005];int main() {ll n, m, x, ans = 0;cin >> n >> m;for (ll i = 1; i <= n; i++) {cin >> x;q.push(x);}while (q.size() >= m) {for (ll i = 1; i <= m; i++) {a[i] = q.top();q.pop();}ans += a[m];for (ll i = m; i >= 1; i--) {if (a[i] - a[m] > 0) q.push(a[i] - a[m]);}}cout << ans << endl;return 0;
}

题解 2:这道题可以考虑直接二分答案( m i d mid mid:作品数量),如果当前社团人数不少于作品数量 m i d mid mid,我们直接 c n t + 1 cnt+1 cnt+1,每个作品这个社团都得出一个人;否则,直接 s u m sum sum把当前社团人数加起来,小于作品数量的社团一定存在不重叠的方案。本质来说就是挨个摞,摞完一个 m i d mid mid再摞下一堆。
最终判定一下 s u m / m i d + c n t sum/mid+cnt sum/mid+cnt m m m大小关系,对应调整作品数量的搜寻区间即可。
代码 2

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
ll x[100005];int main() {ll n, m, ans = 0;cin >> n >> m;for (int i = 1; i <= n; i++) cin >> x[i];ll l = 0, r = 1e18;while (l <= r) {ll mid = (l + r) >> 1;// cnt: 社团人数超过当前枚举作品数量的个数// sum: 不超过当前枚举作品数量的人数ll cnt = 0, sum = 0;for (int i = 1; i <= n; i++) {if (x[i] < mid) sum += x[i];else cnt++;}if (sum / mid + cnt >= m) {l = mid + 1;ans = mid;}else {r = mid - 1;}}cout << ans;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【笔试训练】day2

文章目录 1.牛牛的快递代码&#xff1a; 2.最小花费爬楼梯思路&#xff1a;代码&#xff1a; 3.数组中两个字符串的最小距离思路&#xff1a;代码&#xff1a; 1.牛牛的快递 注意一个坑&#xff0c;首先就是加急是总共加5块&#xff0c;不是每千克加5块。 思路呃&#xff0c;没…

安卓apk文件签名

一、环境准备 链接: https://pan.baidu.com/s/1D3WxIL5M5ewyFNTqJzARPw 提取码: pd6w 上篇博文编译的apk文件 1、docker build -t android-build:v1.0.1 . 直接制作镜像 2、docker run -it android-build:v1.0.1 /bin/bash 运行进入容器 指定sdk的路径&#xff0c;然后直接…

计算机网络3——数据链路层1

文章目录 一、介绍1、基础2、内容 二、数据链路层的几个共同问题1、数据链路和帧2、三个基本问题1&#xff09;封装成帧2&#xff09;透明传输3&#xff09;差错检测 三、点对点协议 PPP1、PPP协议的特点1&#xff09;PPP 协议应满足的需求2&#xff09;PPP 协议的组成 2、PPP协…

JS-32-jQuery01-jQuery的引入

一、初识jQuery jQuery是JavaScript世界中使用最广泛的一个库。鉴于它如此流行&#xff0c;又如此好用&#xff0c;所以每一个入门JavaScript的前端工程师都应该了解和学习它。 jQuery是一个优秀的JS函数库。 &#xff08;对BOM和DOM的封装&#xff09; jQuery这么流行&#x…

Leetcode二叉树刷题

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true public boolean isSymmetric(TreeNode root) {if(rootnull)return true;return compare(root.left,root.right);}public boole…

Emacs之增加/取消输入括号自动匹配(一百三十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

蓝桥杯杂题选做

海盗分金币 题目链接&#xff1a;1.海盗分金币 - 蓝桥云课 (lanqiao.cn) 题解&#xff1a;海盗分金币-Cheery的代码 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a;倒着想就行。 等腰三角形 题目链接&#xff1a;1.等腰三角形 - 蓝桥云课 (lanqiao.cn) 题解&#xff1a;等腰三…

【测试开发学习历程】python常用的模块(中)

目录 5 time模块 5.1、Python中的四种格式的时间&#xff1a; 5.2、time模块中的常用函数 6 I/O流操作 6.1 创建文件 6.2 读取一个文件存入到另外一个文件 6.3 with open as 结构 6.4 open和with open as的区别 7 Excel的操作模块-openpyxl 7.1、新建Excel文件进行读…

读天才与算法:人脑与AI的数学思维笔记01_洛夫莱斯测试

1. 创造力 1.1. 创造力是一种原动力&#xff0c;它驱使人们产生新的、令人惊讶的、有价值的想法&#xff0c;并积极地将这些想法付诸实践 1.2. 创造出在表面上看似新的东西相对容易 1.3. 在遇到偶然间的创造性行为时&#xff0c;都会表现得异…

Vitis HLS 学习笔记--ap_int.h / ap_fixed.h(2)-深度探究

目录 1. 前文回顾 1.1 简单背后的复杂 1.2 复杂性的来源 2. 关键代码 2.1 功能概述 2.2 关系梳理 2.3 理解构造函数二 2.4 理解HLS_CONSTEXPR 2.5 理解const volatile 3. 探究ap_int<8> c&#xff1b;经历了什么 4. 在调试中查看 1. 前文回顾 在《Vitis HLS…

使用 npm 工具高效更新项目依赖包

团队内部会用工具定时检查包的最新版本并通知&#xff0c;以便我们及时跟进社区进展&#xff0c;避免和技术栈出现版本脱节导致无法使用最新特性和优化内容 这里只说明手动查看和更新包的主要几个命令。 npm outdated&#xff1a;检查项目中过时的依赖包及其最新版本。 npm i…

基于Canvas实现的简历编辑器

基于Canvas实现的简历编辑器 大概一个月前&#xff0c;我发现社区老是给我推荐Canvas相关的内容&#xff0c;比如很多 小游戏、流程图编辑器、图片编辑器 等等各种各样的项目&#xff0c;不知道是不是因为我某一天点击了相关内容触发了推荐机制&#xff0c;还是因为现在Canvas…

Hive:posexplode v.s. explode 实现列转行

hive中explode相关的列转行总结 explode explode 的输入只能是 array 或者map格式,按行输出array或map中的元素&#xff0c;比如&#xff1a; select explode(split(1,2,3,,))输出 explode(split(‘1,2,3’, ‘,’))123 -- map explode select explode(map(A,1,B,2,C,3))输…

如何学习敏捷项目管理?这个证书了解一下

当谈及“敏捷管理”时&#xff0c;许多人都能高呼其口号“敏捷迭代&#xff0c;小步快跑”。然而&#xff0c;在实际操作中&#xff0c;我们是否真正把握了敏捷管理的精髓&#xff1f;是否只是空喊口号而未真正实践&#xff1f; 想象这样一个场景&#xff1a;一家公司决定引入…

计算机网络 Cisco路由器基本配置

一、实验内容 1、按照下表配置好PC机IP地址和路由器端口IP地址 2、配置好路由器特权密文密码“abcd&#xff0b;两位班内序号”和远程登录密码“star” 3、验证测试 a.验证各个接口的IP地址是否正确配置和开启 b.PC1 和 PC2 互ping c.验证PC1通过远程登陆到路由器上&#…

【深度学习】深度学习md笔记总结第5篇:神经网络与tf.keras,学习目标【附代码文档】

深度学习笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;深度学习课程&#xff0c;深度学习介绍要求,目标,学习目标,1.1.1 区别,学习目标,学习目标。TensorFlow介绍&#xff0c;2.4 张量学习目标,2.4.1 张量(Tensor),2.4.2 创建张量的指令,2.4.3 张量…

C++ summary 工具 nm c++filt

nm nm 命令是一个用于显示二进制文件&#xff08;通常是可执行文件或共享库&#xff09;中的符号表的工具。它通常用于查看程序或库中定义的全局符号和函数的信息。nm 命令对于分析二进制文件中的符号和调试信息非常有用。 基本语法如下&#xff1a; nm [options] <binar…

AI - 提示词意外收获 (5)

提示词&#xff1a; A soft pink rose with opalescent leaves, located in a surreal desert under the light of a binary star system, The dual shadows and contrasting lights create a dreamlike quality, emphasizing the roses unique beauty,翻译: 一种柔软的粉红…

Kubernetes那点事儿——k8s网络策略

k8s网络策略 网络策略示例1示例2 网络策略 网络策略&#xff08;Network Policy&#xff09;&#xff0c;用于限制Pod出入流量&#xff0c;提供Pod级别和Namespace级别网络访问控制。 一些应用场景&#xff1a; 应用程序间的访问控制。例如微服务A允许访问微服务B&#xff0c…

【位运算 贪心】2835. 使子序列的和等于目标的最少操作次数

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…