题目描述
测试用例:
cbadg
cbgda
输出:
2
public boolean check(String S,String T){
int len = S.length();
int[] alphet = new int[26];
for(int i =0;i<len;i++){
alphet[S.charAt(i) - 'a'] ++;
}
for(int i =0;i<len;i++){
alphet[T.charAt(i) - 'a'] --;
if( alphet[T.charAt(i) - 'a'] < 0){
return false;
}
}
return true;
}
public int ToMove(String S,String T){
if(!check(S,T)){
return -1;
}
int j =0;
for(int i=0;i<S.length();i++){
if(S.charAt(i) == T.charAt(j)){
j++;
}
}
return S.length() - j;
}
题目描述
求n个随机数中最小值的期望值。
三行输入,分别为:
n: 随机数的个数
l1, l2, … ln : li 为第i个随机数的最小值
r1, r2, … rn :ri 为第i个随机数的最大值
即第i个随机数的取值区间是 [li, ri],取到区间里数字的概率相等
示例输入:
2
1 2
3 3
输出:
1.83333
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] l = new int[n];
int[] r = new int[n];
int min1 = Integer.MAX_VALUE;
int min2 = Integer.MAX_VALUE;
for (int i = 0; i < n; i++) {
l[i] = in.nextInt();
min1 = min1 > l[i] ? l[i]:min1;
}
for (int i = 0; i < n; i++) {
r[i] = in.nextInt();
min2 = min2 > r[i] ? r[i]:min2;
}
//一致性:min2-min1>0
double[] p = new double[min2-min1+2];
for(int i = min1;i <= min2; i++){
p[i - min1] = 1;
for(int j = 0;j<n;j++){
if(l[j]<= i && i <= r[j]){
p[i-min1] *= (r[j]-i + 1.0)/(r[j]-l[j] + 1.0);
}
}
}
double ans = 0;
for(int i = 0;i <= min2-min1;i++){
ans += (i + min1) * (p[i]-p[i+1]);
}
System.out.printf("%.6f",ans);
}