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);
    }
}
相关推荐
挠头猴子21 分钟前
c++中常用的运算符优先级
java·开发语言·c++
清空mega34 分钟前
第3章:JSP 基础语法——<% %>、<%= %>、<%! %> 到底怎么用
java·开发语言
流光3337 分钟前
一行命令加密 Spring Boot 项目,零代码侵入
java
程序员鱼皮39 分钟前
【后端必看】什么是 Elasticsearch?都要学什么?
java·数据库·程序员·编程·后端开发
Full Stack Developme41 分钟前
Java 反射原理及应用
java·开发语言·数据库
myloveasuka1 小时前
权限修饰符&代码块
java
柒.梧.1 小时前
Java集合核心知识点深度解析:数组与集合区别、ArrayList原理及线程安全问题
java·开发语言·python
柒.梧.1 小时前
Java基础高频面试题(含详细解析+易错点,面试必看)
java·开发语言·面试
佩奇大王1 小时前
P593 既约分数
java·开发语言·算法
云泽8081 小时前
蓝桥杯算法精讲:贪心算法之推公式例题深度剖析
算法·贪心算法·蓝桥杯