Result: Accepted
Time: 3ms
Memory: 1772kB
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<string>
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const LL infll = 0x3f3f3f3f3f3f3f3f;
const LL mod = 1e9 + 7;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int maxn = 1e5 + 5;
const int maxm = 1.5e7 + 5;
using namespace std;
bool cmp(double a, double b)
{
return a > b;
}
int main()
{
int T, n;
double x, y;
double r[105], f[105];
scanf("%d", &T);
while (T--)
{
int cnt = 0, ans = 0;
scanf("%lf %lf %d", &x, &y, &n);
double t = y / 2.0;
for (int i = 1;i <= n;i++)
{
scanf("%lf", &r[i]);
if (r[i] <= t)
{
cnt++;
f[i] = 0;
continue;
}
double tmp = sqrt(r[i] * r[i] - t*t);
f[i] = 2.0*tmp;
}
if (cnt == n)
{
printf("-1\n");
continue;
}
sort(f + 1, f + 1 + n, cmp);
for (int i = 1;i <= n;i++)
{
if (f[i] == 0 || x <= 0)break;
x -= f[i];
ans++;
}
if (x > 0)printf("-1\n");
else printf("%d\n", ans);
}
return 0;
}