48天强训 & Day1 & JavaOj

简介: 48天强训 & Day1 & JavaOj

48天强训 & Day1 & JavaOj

1. 编程题1 - 组队竞赛

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

6ef45771bba443b9a679a6a017c746e0.png



1.1 读题

fe1801714eb64398b355f9d91e30dd12.png

1.2 算法思想基础

我们应该尽量的让每一个队伍的中间值都最大化~

我们应该尽量的让每一个队伍的最小值都足够小~

前33%的不应该都作为每个队伍的最大值~

接下来我将讲解每个位置应该如何选组员~

但是这里我要说一个前提

首先,我们需要把所有人进行一个排序~

分为前三分之一,中三分之一,后三分之一

后三分之一为整体水平排名靠后的~

1.2.1 后三分之一

我们要想让一个队伍的最小值足够小

那么我们可以让那么就选整体水平的后三分之一

事实也是如此~

证明:(反证法)

首先:

6382e2247af34b1792e2bf4e328451bf.png


其次:


e72281ca3416470e825dc2067f77387c.png

得出结论:


4836b25a5d3643eea9a0bd52d6651f8f.png

也就是说,为了让组队水平最大化,我们应该让每个队伍的最小值,要在整体的后三分之一里去选~

并且这么选都可以,因为最大值和中间值都会比最小值大,并且队伍的水平不受最小值影响~

1.2.2 前三分之二

我们确定了每个队伍的最小值后,紧接着就要确定一个一个的队伍了~

切记,并不能让前三分之一的人都作为每个队伍的最大值,这样非常影响总体水平~

原理跟刚才差不多,可以用反证法证明~


09298b647f644c27bde8938f684ab630.png

其实这样排是有可能做对的

但是,肯定是有漏洞的~

e58f8bee76a6403abb231d754fb25438.png


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


69002750eb3041d9ad880434de318748.png

对于第二个队伍

2658025fdb184f208a6ea2814454a4b7.png


以此类推~

dc88d8f3ca094bd984e7dadc3e68eef4.png

所以,最大水平组队方式就是这样的

水平总和最大值为:

假设有n个队伍

所有人从大到小排为 a3n

水平总和值为Sn

则Snmax = a2 + a4 + a6 + ······ + a2n

1.3 代码设计

n为队伍的个数

那么我们只需要知道前2n名

topK问题

用优先级队列 - 堆

前k大,用小根堆

每次去梢(poll),就是去掉最小值

这里就相当于去掉a2n、a2n-1 ······

按照上面的算法,我们可以从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);
        }
  }
}


解析:

019ea93410024c01a86ee5cdf55aeef3.png


1. 3. 测试

1b512fb2c4f944ca8df98ac1526042ee.png

目录
相关文章
Jetpack Compose中ViewModel、Flow、Hilt、Coil的使用
Jetpack Compose中ViewModel、Flow、Hilt、Coil的使用
1384 0
Jetpack Compose中ViewModel、Flow、Hilt、Coil的使用
|
SQL 存储 监控
水滴筹基于阿里云 EMR StarRocks 实战分享
水滴筹大数据部门的数据开发工程师韩园园老师为大家分享水滴筹基于阿里云EMR StarRocks的实战经验。
6336 3
水滴筹基于阿里云 EMR StarRocks 实战分享
|
10月前
|
机器学习/深度学习 算法 计算机视觉
[YOLOv8/YOLOv7/YOLOv5系列算法改进NO.5]改进特征融合网络PANET为BIFPN(更新添加小目标检测层yaml)
本文介绍了改进YOLOv5以解决处理复杂背景时可能出现的错漏检问题。
328 5
|
10月前
|
iOS开发
iOS之使用模拟器报错:resource fork, Finder information, or similar detritus not allowed完美解决方案
iOS之使用模拟器报错:resource fork, Finder information, or similar detritus not allowed完美解决方案
6646 0
|
10月前
|
分布式计算 DataWorks 关系型数据库
DataWorks常见问题之pyodps报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
116 6
|
10月前
r2dbc分页条件查询
r2dbc分页条件查询
227 0
|
物联网 开发者 异构计算
facechain人物写真生成工业级开源
facechain人物写真应用自8月11日开源了第一版证件照生成后。目前在github(GitHub - modelscope/facechain: FaceChain is a deep-learning toolchain for generating your Digital-Twin.)上已有5.7K的star,论文链接:FaceChain: A Playground for Identity-Preserving Portrait Generation:https://arxiv.org/abs/2308.14256。
854 4
|
人工智能 编解码 算法
【IJCAI 2023】流感知优化之 DAMO-StreamNet 论文解读
传统视频目标检测(Video Object Detection, VOD)是离线(offline)的检测任务,即仅考虑算法的检测精度,未考虑算法的延时。流感知(Streaming Perception)任务作为VOD的一个细分方向,采用流平均精度(Streaming Average Precision, sAP)指标,衡量算法的在线(online)检测能力,即同时衡量算法的精度和延时。本文针对现有的流感知工作在训练方式和模型感受野两方面的不足,提出了DAMO-StreamNet,在保证算法实时性的前提下,实现了SOTA的性能。
1050 4
【IJCAI 2023】流感知优化之 DAMO-StreamNet 论文解读
|
10月前
IKun Progress
IKun Progress
830 0

热门文章

最新文章