#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define EPS (0.000000000001)
#define N 10
int n;
int pos[N];
int weight[N];
double binarySearch(int l, int r)
{
double left = (double)pos[l];
double right = (double)pos[r];
while ((right - left) > EPS)
{
int i;
double mid = (right + left) / 2;
double leftSum = 0, rightSum = 0;
for (i = 0; i <= l; ++i)
{
double value = (weight[i] / (mid -pos[i]) / (mid-pos[i]));
leftSum += value;
}
for (i = r; i < n; ++i)
{
double value = (weight[i]) / (pos[i]-mid) / (pos[i]-mid);
rightSum += value;
}
if (leftSum > rightSum)
left = mid;
else
right = mid;
}
return left;
}
int main()
{
freopen("input.txt", "r", stdin);
int t;
int i, j;
scanf("%d", &t);
for (i = 0; i < t; ++i)
{
printf("#%d ", i + 1);
scanf("%d", &n);
for (j = 0; j < n; ++j)
scanf(" %d", &pos[j]);
for (j = 0; j < n; ++j)
scanf(" %d", &weight[j]);
for (j = 0; j < n - 1; ++j)
printf("%.10lf ", binarySearch(j, j + 1));
printf("\n");
}
return 0;
}
댓글