假设\(n_i\)为十进制数\(n\)的第\(i\)位上的数字,那么\(\max_{i}n_i\)即为答案。
用BFS的方法计算可以以\(O(p)\)的复杂度出\(x\)到\(i(0 \le i < p)\)的最少步数, 记该步数位\(cost(x, i)\)。
分别对\(n\)和\(m\)执行上述步骤,然后枚举\(i(0 \le p < p)\),\(cost(n, i)+cost(m,i)\)的最小值即为答案。
\(n=1\)时特判。
\(n\)为奇数时,最后一步由后手方操作。所以,不论最后一步剩余的两个数字是什么,后手方都能造出一个偶数,所以\(n\)为奇数时后手必胜。
后续仅需讨论\(n\)为偶数的情况。\(n\)为偶数时最后一步由先手方操作。
如果初始数列至少有两个偶数,那么每次后手方操作完数列至少保留2个偶数。因为先手方最优的操作就是删去1个0,而后手方总能耗费任意两个数造出一个偶数。所以最后一步时数列由两个偶数组成,此时后手必胜。
反之,在后手操作完之后先手总能将新造的0删去,所以数列中不会有超过初始值的偶数,所以先手方操作最后一步的时候至多有1个0。此时先手必胜。
赛后看nb网友代码才写出来,至今搞不明白为什么这么整能过。
U操作的复杂度其实是\(O(\text{子树大小})\),稍微构造一下就能卡成\(O(n^2)\)吧。比如给0造个巨大的子树。然后U 0 1和U 1 0无限循环。
原文:https://www.cnblogs.com/zengzk/p/13514397.html