我背绩效了,HRBP在场,Leader主动说出:“工作那么多年,累了,想歇歇,希望你能为我争取个大礼包”。这是什么意思??
背绩效背到一半,Leader当着HRBP的面来一句:“干这么多年,累了,想歇歇,帮我争取个大礼包。”这话一出来,空气都得停两秒。
这哪是聊天啊,这就是职场黑话现场教学。表面上像在自嘲,实际上意思挺直白:哥不想硬耗了,想体面点走,补偿别太寒酸。HRBP坐旁边,八成也不是来听人生感悟的,流程味已经很浓了。
有网友说,这属于“本人不好直说,先让Leader代为发言”。还有人更损,说这都不是暗示了,这简直是把离职诉求拿扩音器喊出来。听着好笑,但也有点心酸。
最惨的是员工听完还得装镇定,心里估计已经开始疯狂复盘:这是在点谁?下一个不会轮到我吧。职场有时候就这样,真话不直接说,偏要包一层“累了想歇歇”的糖衣。
算法题:Nim 游戏
石子摆在那儿,轮到你拿,规则只有一条:每次拿 1 到 3 个,谁拿到最后一个谁赢。
这题看着像博弈,很多人上来就想模拟:我拿 1 个,对手怎么拿;我拿 2 个,对手怎么回。真写起来也不是不能写,但这题我第一眼一般不往搜索树上走,这种规则太短、状态太干净,八成能直接找规律。
你把前几个数手推一遍就出来了:
n = 1,先手直接拿走,赢n = 2,先手拿完,赢n = 3,先手拿完,赢n = 4,先手不管拿 1、2、3 个,都会给对手留下 3、2、1 个,对手都能一把收掉,所以先手输n = 5,先手拿 1 个,留 4 个给对手,对手输n = 6,先手拿 2 个,留 4 个给对手,对手输
看到这儿就别再往下推了,规律已经很明显:只要石子数是 4 的倍数,先手必输;不是 4 的倍数,先手必胜。
这地方的判断其实很顺。因为你每次最多拿 3 个,想把局面“做坏”给对手,最稳的办法就是想办法让对手每次都面对 4, 8, 12... 这种数。 对手如果给你留了 4k + 1,你拿 1 个; 给你留了 4k + 2,你拿 2 个; 给你留了 4k + 3,你拿 3 个。 你总能把它重新打回 4k。
所以这题最后代码短得有点不像算法题,核心就一行判断。
classSolution:
defcanWinNim(self, n: int) -> bool:
return n % 4 != 0
拿几个数跑一下就知道:
defcan_win_nim(n: int) -> bool:
return n % 4 != 0
for i in range(1, 11):
print(i, can_win_nim(i))
输出对应的意思就是:
1, 2, 3能赢4输5, 6, 7能赢8输
这种题还有个很容易写复杂的地方:喜欢上动态规划。
比如有人会写 dp[i] 表示当前剩 i 个石子时先手能不能赢,然后转移成:
defcan_win_nim_dp(n: int) -> bool:
if n <= 3:
returnTrue
dp = [False] * (n + 1)
dp[1] = dp[2] = dp[3] = True
for i in range(4, n + 1):
dp[i] = not (dp[i - 1] and dp[i - 2] and dp[i - 3])
return dp[n]
这个写法逻辑没毛病,但这题用它有点重了。能一眼看规律的题,就别硬上表格,不然题是做出来了,味道不对。面试里你真把规律讲清楚,比闷头甩一个 dp 更加分。
所以 Nim 游戏这题,重点不在代码,在于你能不能及时收手: 别把简单题做成体力活。 看到 1~3 这种固定操作范围,先试着列小样本找循环,很多时候比套模板快得多。