#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
int tasks;
cin >> tasks;
while (tasks--)
{
int n, p, w, h;
cin >> n >> p >> w >> h;
int s, s0, A = 0;
int lines;
int n_cha, max;
vector<int> a(n);
for(int i = 0; i < n; ++i)
{
cin >> a[i];
A += a[i];
}
//s0 = sqrt(p * h * w / A);
//s = (w < h) ? w : h;
//s = (s < s0) ? s : s0;
s = sqrt(p * h * w / A);
while (true)
{
lines = 0;
n_cha = w / s;
max = h / s * p;
for (int i = 0; i < n; ++i)
{
lines += a[i] / n_cha;
if (a[i] % n_cha != 0) ++lines;
}
if (lines <= max)break;
else --s;
}
cout << s << endl;
}
return 0;
}
暴力解没什么可说的。
只有一点:font size的起点。一开始用了min(W,H),离终点非常之远,但竟然也能AC。后来改成sqrt(p * h * w / A),效率提高很多,时间从10~20ms变成0~3ms.