【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 部门组队编程(200分) - 三语言AC题解(Python/Java/Cpp)

本文主要是介绍【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 部门组队编程(200分) - 三语言AC题解(Python/Java/Cpp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

https://app5938.acapp.acwing.com.cn/contest/2/problem/OD1060

🌍 评测功能需要 ⇒ 订阅专栏 ⇐ 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🍊 部门组对编程
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码

🍊 部门组对编程

问题描述

LYA所在的部门计划通过结对编程的方式进行项目开发。已知部门中有 n n n 名员工,每个员工都有一个独特的职级。结对编程要求从部门中选出三名员工组成一个小组,设这三名员工的序号分别为 i i i j j j k k k,他们的职级分别为 l e v e l [ i ] level[i] level[i] l e v e l [ j ] level[j] level[j] l e v e l [ k ] level[k] level[k],则小组需要满足以下条件之一:

  1. l e v e l [ i ] < l e v e l [ j ] < l e v e l [ k ] level[i] < level[j] < level[k] level[i]<level[j]<level[k]
  2. l e v e l [ i ] > l e v e l [ j ] > l e v e l [ k ] level[i] > level[j] > level[k] level[i]>level[j]>level[k]

其中, 0 ≤ i < j < k < n 0 \le i < j < k < n 0i<j<k<n

请你计算在满足上述条件的情况下,可以组建的小组数量。注意,同一员工可以参与多个小组。

输入格式

第一行输入一个正整数 n n n,表示员工总数。

第二行输入 n n n 个正整数,以空格分隔,表示按员工序号排列的职级 l e v e l [ 0 ] level[0] level[0] l e v e l [ n − 1 ] level[n-1] level[n1]

输出格式

输出一个整数,表示可以组建的小组数量。

样例输入

4
1 2 3 4

样例输出

4

样例输入

3
5 4 7

样例输出

0

数据范围

  • 1 ≤ n ≤ 6000 1 \le n \le 6000 1n6000
  • 1 ≤ l e v e l [ i ] ≤ 1 0 5 1 \le level[i] \le 10^5 1level[i]105

题解

可以枚举每个员工作为小组的中间位置,然后统计其左侧职级比他低的人数乘以右侧职级比他高的人数,这样就能得到以该员工为中间人所能组成的小组数量。需要注意的是,为了避免重复统计,我们需要将所有员工按照职级从低到高或从高到低排序,然后再进行统计。

具体步骤如下:

  1. 读入员工总数 n n n 以及每个员工的职级 l e v e l level level
  2. 正序计算每个员工作为中间位置所能组成的小组数量:
    • 对于第 i i i 个员工,统计其左侧职级比他低的人数 l e f t [ i ] left[i] left[i]
    • 对于第 i i i 个员工,统计其右侧职级比他高的人数 r i g h t [ i ] right[i] right[i]
    • 累加 l e f t [ i ] × r i g h t [ i ] left[i] \times right[i] left[i]×right[i] 到答案中。
  3. 将员工职级序列反转,然后重复步骤 2。

参考代码

  • Python
n = int(input())
level = list(map(int, input().split()))def count_groups(level):n = len(level)res = 0left = [0] * nright = [0] * nfor i in range(n):for j in range(i):if level[j] < level[i]:left[i] += 1for j in range(i + 1, n):if level[j] > level[i]:right[i] += 1for i in range(n):res += left[i] * right[i]return resres = count_groups(level)
res += count_groups(level[::-1])
print(res)
  • Java
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] level = new int[n];for (int i = 0; i < n; i++) {level[i] = sc.nextInt();}long res = countGroups(level);res += countGroups(reverse(level));System.out.println(res);}private static long countGroups(int[] level) {int n = level.length;long res = 0;int[] left = new int[n];int[] right = new int[n];for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {if (level[j] < level[i]) {left[i]++;}}for (int j = i + 1; j < n; j++) {if (level[j] > level[i]) {right[i]++;}}}for (int i = 0; i < n; i++) {res += (long) left[i] * right[i];}return res;}private static int[] reverse(int[] level) {int n = level.length;int[] res = new int[n];for (int i = 0; i < n; i++) {res[i] = level[n - i - 1];}return res;}
}
  • Cpp
#include <bits/stdc++.h>
using namespace std;long long countGroups(vector<int>& level) {int n = level.size();long long res = 0;vector<int> left(n, 0), right(n, 0);for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {if (level[j] < level[i]) {left[i]++;}}for (int j = i + 1; j < n; j++) {if (level[j] > level[i]) {right[i]++;}}}for (int i = 0; i < n; i++) {res += (long long) left[i] * right[i];}return res;
}int main() {int n;cin >> n;vector<int> level(n);for (int i = 0; i < n; i++) {cin >> level[i];}long long res = countGroups(level);reverse(level.begin(), level.end());res += countGroups(level);cout << res << endl;return 0;
}

这篇关于【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 部门组队编程(200分) - 三语言AC题解(Python/Java/Cpp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076207

相关文章

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则