顺便附上第三题代码,我感觉思路和答案都是对的啊,看看有没有大佬指导一下
(每次二分查找之后其实可以更新left的,但是懒得优化)
int binarySearch(int n, const vector<int>& mosters)
{
int l = -1;
int r = mosters.size();
while (l + 1< r)
{
int m = (r - l) / 2 + l;
if (mosters[m] < n)
{
l = m;
}
else
{
r = m;
}
}
return l;
}
int main() {
int p, n, m;
cin >> p >> n >> m;
vector<int> mosters(n);
vector<bool> killed(n, 0);
vector<int> bosses(m);
for (int i = 0; i < n; i++)
{
cin >> mosters[i];
}
for (int i = 0; i < m; i++)
{
cin >> bosses[i];
}
for (auto boss : bosses)
{
int curP = p;
int left = -1;
int right = mosters.size();
int time = 0;
while (curP <= boss)
{
time++;
int mosterId = binarySearch(curP, mosters);
while (mosterId != -1 && killed[mosterId])
{
mosterId--;
}
if (mosterId <= -1 || mosters[mosterId] < 0.1 * curP) // 都打不过或者不如 * 1.1
{
curP *= 1.1;
}
else
{
curP += mosters[mosterId];
killed[mosterId] = true;
}
cout << time << " " << curP << endl;
}
cout << time << endl;
}
}