分析题目不难发现,大的数字能变小,小的数字不能变大,容易想到一个贪心的思路:
令当前数字为 xxx:
1. 若 x>nx > nx>n,将 xxx 整除 222。
2. 若已经有数字 y(1≤y≤n,y=x)y(1 \le y \le n, y = x)y(1≤y≤n,y=x),将 xxx 整除 2。
重复以上操作直至 xxx 变为 000 或者找到一个没有得到的排列中的数字为止。
使用一个数组 ppp 存储 111 到 nnn 一共 nnn 个数字是否出现过。
若操作完整个数组 ppp 后,以上条件满足则输出 YES\tt{YES}YES 否则输出 NO\tt{NO}NO。
AC代码
复杂度分析
对于数组中的每个数字,将其做处理的时间复杂度为 logai\log{a_i}logai ,处理完整个数组时间复杂度为 O(nlogaiO(n\log{a_i}O(nlogai )。