网易雷火笔试
- 礼物
- 从前两年开始送礼物
- 第 1,3,6,10 年有纪念物
- 今年送礼物外,送之前应该有但是没送过的礼物
- 复制粘贴操作
- 有全选,选一个,复制,粘贴操作
- 一次复制后可以进行多次粘贴 一
- 开始有1个A 最后需要有N个A
- 如何操作,使得操作数最少
- 广告游戏
- 第二个题目 广告游戏 输入为初始战斗力 p,怪物数量 n , boss战斗力
- 然后依次输入n个怪物,每个怪物的战斗力,都是升序排列
- 只有战斗力大于boss或怪物战斗力才能挑战(所有战斗力均为整数)
- 挑战怪物成功,获得怪物对应战斗力,每个怪物挑战完一次之后不能再被挑战
- 或者可以在任意时刻选择自我战斗力 *1.1(向下取整)
- 至少需要经过多少次战斗力提升之后能够打败boss
- 永劫无间
- 有毒圈
- [0, 0] - [30, 30]
- 每次刷圈向内 1 个单位
- 累计到 2
- 第一次倒有花
- 每次操作输出当前存活人数和队伍
- 操作:
- KO
- UP
- RESPAWN
- MOVE
- SHRINK
- QUIT
第一题 A 了
第二题看了一下是 DP,但是感觉思路有点不不清晰,需要想很久,就先去做后面两道
第三题 思路挺清晰的,二分查找找到能打的最厉害的怪,然后判断是打怪还是自我提升
第一次写没有注意打了之后不能再打,两个样例只有一个是对的,但是提交上去通过了50%+
后面发现每次打了一个怪物之后不能再打,加入一个数组判断是否已经打过,感觉逻辑对了,两个样例也对了,结果通过数反倒变成6%了
甚至开始怀疑是不是用例给错了
第四题
每种情况一个一个写,只写了 KO 和 Exit(也写了一个小时左右),通过了30%左右
不过感觉题目逻辑有点问题啊,有花的时候被杀不是幽灵状态吗,这个时候虽然存活数应该减少,但是应该不能叫fall吧,应该只有没花的时候被杀才是fall啊
- 从前两年开始送礼物
- 第 1,3,6,10 年有纪念物
- 今年送礼物外,送之前应该有但是没送过的礼物
- 复制粘贴操作
- 有全选,选一个,复制,粘贴操作
- 一次复制后可以进行多次粘贴 一
- 开始有1个A 最后需要有N个A
- 如何操作,使得操作数最少
- 广告游戏
- 第二个题目 广告游戏 输入为初始战斗力 p,怪物数量 n , boss战斗力
- 然后依次输入n个怪物,每个怪物的战斗力,都是升序排列
- 只有战斗力大于boss或怪物战斗力才能挑战(所有战斗力均为整数)
- 挑战怪物成功,获得怪物对应战斗力,每个怪物挑战完一次之后不能再被挑战
- 或者可以在任意时刻选择自我战斗力 *1.1(向下取整)
- 至少需要经过多少次战斗力提升之后能够打败boss
- 永劫无间
- 有毒圈
- [0, 0] - [30, 30]
- 每次刷圈向内 1 个单位
- 累计到 2
- 第一次倒有花
- 每次操作输出当前存活人数和队伍
- 操作:
- KO
- UP
- RESPAWN
- MOVE
- SHRINK
- QUIT
第一题 A 了
第二题看了一下是 DP,但是感觉思路有点不不清晰,需要想很久,就先去做后面两道
第三题 思路挺清晰的,二分查找找到能打的最厉害的怪,然后判断是打怪还是自我提升
第一次写没有注意打了之后不能再打,两个样例只有一个是对的,但是提交上去通过了50%+
后面发现每次打了一个怪物之后不能再打,加入一个数组判断是否已经打过,感觉逻辑对了,两个样例也对了,结果通过数反倒变成6%了
甚至开始怀疑是不是用例给错了
第四题
每种情况一个一个写,只写了 KO 和 Exit(也写了一个小时左右),通过了30%左右
不过感觉题目逻辑有点问题啊,有花的时候被杀不是幽灵状态吗,这个时候虽然存活数应该减少,但是应该不能叫fall吧,应该只有没花的时候被杀才是fall啊
全部评论
hello,请问你是春招还是实习呀
顺便附上第三题代码,我感觉思路和答案都是对的啊,看看有没有大佬指导一下
(每次二分查找之后其实可以更新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;
}
}
第一题没看懂啊佬
相关推荐