考察数论基础知识。10000 的质因子只有 2 和 5,能被 2整除的数有 5000 个,能被 55 整除的数有 2000个,但是即能被 2 整除,也能被 5整除的数被算了两遍,即能被 10 整除的 1000 个数。
所以答案是 10000 - 5000 - 2000 + 1000 = 4000
考察数据结构基础知识。观察程序可知ret
存的是x
二进制 1 的个数,带入一些不同的x
值到程序中,会发现x &= x - 1
是用来获取 x 最低位的 1的,所以符合要求。
(0,7,8),(1),(2,4),(5),(6,9) 。
考察双向链表的基本操作。程序按照 x 的值从 1到 n 枚举每个值,依次在双向链表中删除该点,删除的时候就可以知道该值左边最近比它大元素的位置和右边最近比它大元素的位置。
第 ① 空是 a
数组的初始化操作,标记每个值的位置,所以需要填 a[x] = i
。
第 ② 空是双向链表指针的初始化操作,右指针指向右边相邻的元素,所以需要填 i + 1
。
第 ③④ 空是双向链表的删除操作,当前元素右边元素的左指针需要指向左边元素,左边元素的右指针需要指向右边元素,所以分别填 R[a[i]]
和 a[i]
。
最后需要输出答案,即 R[i]
的值,所以第 ⑤ 空需要填 R[i]
。
制作不易,打赏求支持
谢谢各位