Play the Dice
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2914 Accepted Submission(s): 927
Special Judge
The first line is an integer n (2<=n<=200), following with n integers ai(0<=ai<200)
The second line is an integer m (0<=m<=n), following with m integers bi(1<=bi<=n), which are the numbers of the special sides to get another more chance.
什麼題啊這是,題意感覺不太清晰啊……讀着以爲每次投的時候,要算有特殊標記的上的數字,然後再投,其實投到有特殊標記的就只是多獲得的一次機會而已啊?
並不算這個特殊面上的數字是多少。
這樣的話每次投到有特殊標記的概率是m / n
設q = m / n, a = sum / n
那麼最後的期望就是
E(Y) = a + a * q + a * q^2 + a * q^3 + ... + a * q^k , k->無窮
E(Y) = lim a(1 - q^(k + 1)) / (1 - q), k ->無窮
這時候就看q = m / n的大小了
如果m == n,那麼1 - q == 0,發散
如果m > n,那麼q^(k + 1)趨於無窮,發散
如果m < n,那麼E(Y) = a(1 - 0) / (1 - q) = (sum / n) / (1 - m / n) = sum / (n - m)
另外就是sum = 0的時候不管怎麼樣最後肯定是0
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n, m, sum;
int a[205], b[205];
int main()
{
while (~scanf("%d", &n)) {
sum = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
sum += a[i];
}
scanf("%d", &m);
for (int i = 0; i < m; i++) {
scanf("%d", &b[i]);
}
if (sum == 0) {
puts("0.00");
continue;
}
if (m >= n) {
puts("inf");
} else {
printf("%.2f\n", 1.0 * sum / (n - m));
}
}
return 0;
}