#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define all(x) (x).begin(), (x).end() #define bit(x) (1 << (x)) #define cnt1(x) (__builtin_popcount(x)) #define LB lower_bound #define LET(it,v) __typeof(v) it(v) #define mset0(x) memset((x), 0, sizeof((x))) #define mset1(x) memset((x), -1, sizeof((x))) #define pb push_back #define PQ priority_queue #define REP(it,v) for(LET(it,v.begin());it!=v.end();it++) #define sz(x) ((int)(x.size())) #define UB upper_bound #define X first #define Y second typedef long long LL; typedef double DB; typedef pair pii; typedef pair pll; typedef vector vi; typedef vector vpii; template inline void chkmin(T &a, T b) { if (b < a) a = b; } template inline void chkmax(T &a, T b) { if (a < b) a = b; } inline double sqr(double x) { return x * x; } const int MX = 1000005; const double EPS = 1e-8; double h[MX], a[MX]; int main() { int T, n, i; for (scanf("%d", &T); T--; ) { scanf("%d", &n); double s = 0; for (i = 1; i <= n; i++) { scanf("%lf", h + i); } for (i = 1; i <= n; i++) { scanf("%lf", a + i); s += h[i] * a[i] * a[i] / 3; } double st = 0, en = 1005; while (st < en - EPS) { double md = (st + en) / 2; double cur = 0; for (i = 1; i <= n; i++) if (h[i] > md) { double rt = (h[i] - md) / h[i]; cur += sqr(rt * a[i]) * (h[i] - md) / 3; } if (cur > s / 2) st = md; else en = md; } double ans = 0; for (i = 1; i <= n; i++) if (h[i] > st) { double rt = (h[i] - st) / h[i]; ans += sqr(rt * a[i]); } //printf("%d\n", int(floor(ans))); printf("%d\n", int(floor(st + EPS))); } return 0; }