假如 n = 20。考虑报数过程中哪些数会是序列取反:7,14,17
如果我们先不取反,复原序列的过程会是:now = 20 表示第 20 个人报出 20 这个树。然后考虑 17 取反,以 17 为对称中心,即 17=(now+now′)/2 得 now′=17×2−now 所以更新 now = 17 * 2 - 20 = 14。
然后考虑 14 取反,now = 14
考虑 7 取反,now = 0。又因为总人数是 1337,所以 now=1337。
此时求得答案 当 n = 20,报出的人是 1337
令 ai 表示第 i 个需要取反的数,满足 ai 是七的倍数或含 7。
每个 ai 贡献为:如果 i 是奇数,a[i]∗2,偶数,−a[i]∗2
然后如果 a 的个数为奇数,答案 −n,否则 +n
至于如何求得 a 数组, 不会了。dp ?或者打表(