题目大意:

现在有 n n n个兔子抢胡萝卜, n n n个兔子初始质量分别为 w i w_i wi,每次会有一个兔子胜出,然后它只一个萝卜质量 w + 1 w+1 w+1,每回合第 i i i 个兔子生出的概率为: w i <munderover> j = 1 n </munderover> w j \frac {w_i} {\sum_{j=1}^{n}w_j} j=1nwjwi现在问 k k k天之后,兔子们体重的期望。

分析:

考虑 k k k天增长的体重总量为 k k k,所以第 i i i只兔子的体重期望为: w i + k w i <munderover> j = 1 n </munderover> w j w_i + k*\frac {w_i} {\sum_{j=1}^{n}w_j} wi+kj=1nwjwi

#include <iostream>
using namespace std;
const int maxn = 1000052;
long long int w[maxn], sum;
int main() {
	int n, k, T;
	cin >> T;
	while (T--) {
		cin >> n >> k;
		sum = 0;
		for (int i = 0; i < n; i++) {
			scanf("%lld", &w[i]);
			sum += w[i];
		}
		for (int i = 0; i < n; i++) {
			if (i != 0) {
				printf(" ");
			}
			printf("%lf", w[i] + w[i] * k * 1.0 / sum);
		}
		printf("\n");
	}
	return 0;
}