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

48天强训 Day1 JavaOj

48天强训 & Day1 & JavaOj

1. 编程题1 - 组队竞赛

组队竞赛_牛客笔试题_牛客网 (nowcoder.com)

在这里插入图片描述

1.1 读题

在这里插入图片描述

1.2 算法思想基础

  1. 我们应该尽量的让每一个队伍的中间值都最大化~
  2. 我们应该尽量的让每一个队伍的最小值都足够小~
  3. 前33%的不应该都作为每个队伍的最大值~
  • 接下来我将讲解每个位置应该如何选组员~
    • 但是这里我要说一个前提
    • 首先,我们需要把所有人进行一个排序~
    • 分为前三分之一,中三分之一,后三分之一
    • 后三分之一为整体水平排名靠后的~

1.2.1 后三分之一

  • 我们要想让一个队伍的最小值足够小
  • 那么我们可以让那么就选整体水平的后三分之一
    • 事实也是如此~

证明:(反证法)

  • 首先:

在这里插入图片描述

  • 其次:

在这里插入图片描述

  • 得出结论:

在这里插入图片描述

  • 也就是说,为了让组队水平最大化,我们应该让每个队伍的最小值,要在整体的后三分之一里去选~
  • 并且这么选都可以,因为最大值和中间值都会比最小值大,并且队伍的水平不受最小值影响~

1.2.2 前三分之二

  • 我们确定了每个队伍的最小值后,紧接着就要确定一个一个的队伍了~
    • 切记,并不能让前三分之一的人都作为每个队伍的最大值,这样非常影响总体水平~
    • 原理跟刚才差不多,可以用反证法证明~

在这里插入图片描述

  1. 其实这样排是有可能做对的
  2. 但是,肯定是有漏洞的~

在这里插入图片描述

  • 而正确的思想是,一个一个队伍的去确定,每次确定都让这个队伍水平最大化~

在这里插入图片描述

  • 对于第二个队伍

在这里插入图片描述

  • 以此类推~

在这里插入图片描述

  • 所以,最大水平组队方式就是这样的
  • 水平总和最大值为:
    • 假设有n个队伍
    • 所有人从大到小排为 a3n
    • 水平总和值为Sn
    • 则Snmax = a2 + a4 + a6 + ······ + a2n

1.3 代码设计

  1. n为队伍的个数
  2. 那么我们只需要知道前2n名
    • topK问题
    • 用优先级队列 - 堆
    • 前k大,用小根堆
    • 每次去梢(poll),就是去掉最小值
    • 这里就相当于去掉a2n、a2n-1 ······
  3. 按照上面的算法,我们可以从a2n + a2n-2 + ······ + a4 + a2
    • 即从后往前加
  • 当然也可以直接用各种排序方式去排序,然后按照下标依次相加~
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while(scanner.hasNextInt()) {int number = scanner.nextInt();PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();for (int i = 0; i < number * 3; i++) {int value = scanner.nextInt();if(i < 2 * number) {priorityQueue.offer(value);}else {if(value > priorityQueue.peek()) {priorityQueue.poll();priorityQueue.offer(value);}}}long result = 0;for (int i = 0; i < number; i++) {result += priorityQueue.poll();priorityQueue.poll();}System.out.println(result);}}
}
  • 解析:

在这里插入图片描述

1. 3. 测试

在这里插入图片描述

http://www.lryc.cn/news/41300.html

相关文章:

  • 崩溃的一瞬间
  • 13回归网络:HTTP/2是怎样的网络协议?
  • CSS学习笔记——基础选择器,字体属性,文本属性,三种样式表
  • 第十四届蓝桥杯三月真题刷题训练——第 16 天
  • 鸟哥的Linux私房菜 Shell脚本
  • FPGA基于RIFFA实现PCIE采集ov5640图像传输,提供工程源码和QT上位机
  • week13周报
  • 离散选择模型中的分散系数theta到底该放在哪里呢?
  • 【CSAPP】进程 | 上下文切换 | 用户视角下的并发进程
  • 节流还在用JS吗?CSS也可以实现哦
  • 带你看看 TypeScript 5.0 的新特性
  • C语言预处理条件语句的 与或运算
  • 从零实现深度学习框架——学习率调整策略介绍
  • 系统架构:经典三层架构
  • 数据结构--二叉树
  • Keil5安装和使用小记
  • 多机器人集群网络通信协议分析
  • 【PyTorch】手把手带你快速搭建PyTorch神经网络
  • 【完整代码】用HTML/CSS制作一个美观的个人简介网页
  • Java分布式事务(九)
  • 基于深度学习的动物识别系统(YOLOv5清新界面版,Python代码)
  • K8S集群之-ETCD集群监控
  • 一文弄懂熵、交叉熵和kl散度(相对熵)
  • 10从零开始学Java之开发Java必备软件Intellij idea的安装配置与使用
  • 04 - 进程参数编程
  • 【python进阶】你真的懂元组吗?不仅是“不可变的列表”
  • 《C++ Primer Plus》(第6版)第13章编程练习
  • 【多线程】多线程案例
  • 【IoT】嵌入式驱动开发:IIC子系统
  • DJ2-4 进程同步(第一节课)