华为OD上机考试真题(Java)——排队游戏

题目:

新来的老师给班里的同学排一个队,每个学生有一个能力值。

一些学生是刺头,不会听老师的话,自己选位置;

非刺头同学在剩下的位置按照能力值从小到大排。

对于非刺头同学,如果发现他前面有比自己高的同学,他不满程度就增加,增加的数量等于前面能力值比他大的同学的个数。

刺头不会产生不满。

如果整个班级累计的不满程度超过 ( k ),那么老师就没有办法教这个班级了。

输入描述:

shell 复制代码
输入有三行:
第一行为 ( n, m, k ) 空格隔开,分别表示班级总人数、刺头人数、最大不满程度 ( k )。
第二行为刺头所在位置(从 0 开始,即排队数组的下标,比如 1 代表队伍中第 2 个同学是刺头),位置的数组也是排序的。
第三行有 ( n ) 个数,空格隔开,表示老师排好的队中每个人的能力值,其中非刺头同学一定按照能力值从小到大排好序的。

输出描述:

shell 复制代码
0 表示老师可以继续教这个班级;
1 表示老师无法继续教这个班级。

说明:

shell 复制代码
( n ) 范围是 [1, 100000]
( m ) 范围是 [1, ( n )]
( k ) 范围是 [1, 1000000000]
每位同学的能力值范围是 [1000, 100000]

示例一:

输入

复制代码
4 2 3
1 3
1810 1809 1801 1802

输出

复制代码
1

先看结果 :

通过以下步骤来实现:

  1. 读取输入:

    • 第一行读取 n, m, k。
    • 第二行读取刺头学生的位置。
    • 第三行读取所有学生的能力值。
  2. 处理数据:

    • 将刺头学生的位置标记为特殊值(例如 -1)。
    • 计算每个非刺头学生的不满程度,并累加到总不满程度中。
  3. 判断结果:

    • 如果总不满程度超过 k,输出 1。
    • 否则,输出 0。

下面是一个具体的Java代码实现:

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取输入
        // 班级总人数
        int n = scanner.nextInt();
        // 刺头总人数
        int m = scanner.nextInt();
        // 最大不满程度
        long k = scanner.nextLong();

        int[] positions = new int[n];
        for (int i = 0; i < m; i++) {
            // 刺头所在位置
            positions[scanner.nextInt()] = -1;
        }

        long[] values = new long[n];
        for (int i = 0; i < n; i++) {
            values[i] = scanner.nextLong();
        }

        // 计算不满
        long totalDissatisfaction = 0;
        for (int i = 0; i < n; i++) {
            // 跳过刺头
            if (positions[i] == -1) continue;

            int count = 0;
            for (int j = 0; j < i; j++) {
                if (values[j] > values[i]) {
                    count++;
                }
            }
            totalDissatisfaction += count;
        }

        // 输出结果
        if (totalDissatisfaction > k) {
            System.out.println(1);
        } else {
            System.out.println(0);
        }
    }
}
相关推荐
省钱兄--zs12 分钟前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲29 分钟前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog38 分钟前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户212968352616843 分钟前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
helmsail1 小时前
05 管理活动与选品
java
天远数科1 小时前
Java数据工程:利用天远人车核验加强版优化智慧高速ETC发行合规体验
java·人工智能
.Bryce.1 小时前
在智能体中使用A2A工具:让大模型自己决定“该找谁帮忙“
android·java·服务器·redis·后端·agent·a2a
xiaoqiMikko1 小时前
fastjson 1.2.84 的补丁关掉了一个缓存:addAccept 包前缀白名单下,反序列化慢了 13~28 倍
java·后端·性能优化
XIAEE2 小时前
转生到儿童编程异世界:我用 Vue 和 Scratch 建了一座 DREAM 学院
java·spring
XIAEE2 小时前
初次使用 Node + Koa + MongoDB 搭建服务器:从零到第一个 API
java·spring