讲道理应该是有O(n)的方法的 但是wa了
#include<iostream>
#include<cstdio>
#include<set>
#include<string>
#include<string.h>
#include<cstring>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<cctype>
#include<algorithm>
#include<sstream>
#include<utility>
#include<cmath>
#include<functional>
#define mt(a) memset(a,0,sizeof (a))
#define fl(a,b,c) fill(a,b,c)
#define SWAP(a,b,t) (t=a,a=b,b=t)
#define inf 1000000000+7
using namespace std;
typedef long long ll;
double cost[1200];
double come[1200];
double wa[1200];
int main()
{
int T;
cin >> T;
while (T--)
{
int n;
mt(come);
mt(wa);
cin >> n;
for (int i = 1; i <= n; i++)
scanf("%lf", &cost[i]);
for (int i = 1; i <= n; i++)
{
scanf("%lf", &come[i]);
wa[i] = max(come[i] - come[i - 1], wa[i - 1]);
}
double ans = 0, ave = 0;
for (int i = 1; i <= n; i++)
{
double time = wa[i], nall = 0; int peo = 0;
for (int j = 1; j <= n; j++)
{
if (wa[j] > time)break;
nall += cost[j];
peo++;
}
if (nall / peo > ave){ ave = nall / peo; ans = time; }
else if (nall / peo == ave&&ans > time)ans = time;
}
printf("%.6lf %.6lf\n", ans, ave);
}
return 0;
}