题解分享
题解分享简介
最优分组(编程题) - 题解
视频中标准程序代码如下:
```java
import java.util.Scanner;
public class Main {
static final int N = (int) 1e6 + 10;
static double[] f = new double[N];
static double[] g = new double[N];
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
double p = scanner.nextDouble();
double ans = Double.MAX_VALUE;
int ot = 1;
double np = 1 - p;
for (int i = 1; i <= n; i++) {
f[i] = 1 - np;
g[i] = np;
np *= (1 - p);
}
double m = 1.0 * n * p;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
double group = n / i;
double res;
if (i == 1) {
res = group;
} else {
res = group * (f[i] * (i + 1) + g[i]);
}
if (res < ans) {
ans = res;
ot = i;
}
}
}
System.out.println(ot);
}
}
```
查看全文
2
0
0
13
最优分组(编程题) - 题解
```
import java.util.*;
public class Main1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
double p = scanner.nextDouble();
int ot = 1;
double ans = Double.MAX_VALUE;
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
double res;
double group = n / i;
if (i == 1) {
res = group;
} else {
//至少有一个被感染的概率*组数*每组的个数 + 组数
res = (1 - Math.pow(1 - p, i)) * group * i + group;
}
if (res < ans) {
ans = res;
ot = i;
}
}
}
System.out.println(ot);
}
}
```
查看全文
0
0
0
3



