2024年蓝桥杯Java B组省赛真题超详解析-最优分组

审题:混合、再消耗;取值、最小

汇总:关键:期望

基础:特殊情况

注意:稍微理解

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

public class Main {

    static int N, ans;
    static double p, min = Double.MAX_VALUE / 2; // min是可能的最小期望
    static ArrayList<Integer> factors = new ArrayList<>();

    // 计算不同K值对应的期望
    static double calculateExpected(int K) {
        if (K == 1) return N; // 每一个都检测,所以直接是N的消耗
        double probabilityAllNegative = Math.pow(1 - p, K);
        double expectedTestsPerGroup = probabilityAllNegative * 1 + (1 - probabilityAllNegative) * (1 + K);
        return expectedTestsPerGroup * ((double) N / K);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        p = sc.nextDouble();

        // 计算所有的约数K
        for (int i = 1; i <= Math.sqrt(N); i++) {
            if (N % i == 0) {
                factors.add(i);
                if (N / i != i) {
                    factors.add(N / i);
                }
            }
        }

        // 对K进行升序
        Collections.sort(factors);

        // 枚举所有可能的约数K,寻找最小期望对应的K
        for (int K : factors) {
            double currentExpected = calculateExpected(K);
            if (currentExpected < min) {
                ans = K;
                min = currentExpected;
            }
        }

        System.out.println(ans);
    }
}
相关推荐
对方正在长头发丿6 分钟前
P1162 填涂颜色(BFS)
数据结构·c++·算法·蓝桥杯·宽度优先
优雅的38度1 小时前
SpringBoot 3.0+ 整合 Swagger 3.0
java·后端
Pitayafruit1 小时前
🔥 Spring Boot 3 整合 zxing:轻松生成二维码的指南
java·spring boot·后端
雷渊1 小时前
redis如何实现发布/订阅功能?
java·后端·面试
雷渊1 小时前
redis中的zset怎么实现的?
java·后端·面试
好好学习^按时吃饭1 小时前
蓝桥杯2024年第十五届省赛真题-爬山
蓝桥杯
Anarkh_Lee1 小时前
图解JVM - 21.JVM运行时参数
java·jvm·后端
Anarkh_Lee1 小时前
图解JVM - 22.分析GC日志
java·jvm·后端
kong79069281 小时前
SpringBoot整合SSM
java·spring boot·ssm
骑牛小道士1 小时前
java基础使用- 泛型
java·开发语言