大家好,我是神崎兰子,这次比赛D和E的出题人。
说实话出题之前我没想到这次会这么毒瘤,D最终3w多发提交,E最后也成为了防ak题。
这次本来只出了E题,D是在看到那个随机数题(也就是现在的A题)之后想抖一个机灵,于是这样诞生了。本来以为把答案写在“样例输出”上会是一个不错的提示,没想到还是有这么多人没猜到ww
这里主要讲一下E题。关于E题的题解已经由清楚姐发了:https://ac.nowcoder.com/discuss/396514?type=101&order=0&pos=6&page=1
说一下出题的目的以及解题思路吧。
这道题出出来主要是想看看大家对数论的敏感度,以及“看样例猜结论”的一个能力。题目描述里也蛛丝马迹给了很多提示。不过最后看来,好好去做E题的人并不是很多,可能大家也以为E也是个抖机灵的题目吧。这里稍微有点遗憾。
首先说一下题面里的提示吧:

  • 题目名字是return 1,结合样例里的1对应的0,其他的都大于0,不难猜到是要通过某种运算计算出1。
  • 观察到3对应的1,而6对应的infinity。如果对数论很感兴趣的童鞋可能已经会猜想到“完全数”这个东西:若一个数取自己所有因子(除了它自己)求和为它本身,那么该数为完全数。而6则是最小的完全数。
  • “不断将灵魂的碎片收集,作为下一个目的地的路标”,这里可以理解为收集某些东西求和。下一个目的地的路标则可以理解为不断迭代。最终的终点即为1。
  • 这个运算被我命名为“约和运算”,感兴趣的同学可以看一下这个链接:https://baike.baidu.com/item/%E7%BA%A6%E5%92%8C%E8%BF%90%E7%AE%97/7558837?fr=aladdin

那么这道题就是不断的求约数之和(去掉本身这个约数)的一个迭代计算。输出迭代到1的次数。“完全数”、“亲和数”或者会迭代到这种数的数是永远不会到1的,则输出infinity。
在此还是为出了这么毒瘤的题谢罪一下qwq
最后祝大家愚人节快乐~希望大家玩的开心^.^