AT_aising2020_d Anything Goes to Zero

题目描述

# 任何东西都会归零 [problemUrl]: https://atcoder.jp/contests/aising2020/tasks/aising2020_d 定义 $ \mathrm{popcount}(n) $ 为 $ n $ 在二进制表示中 '1' 的个数。例如,$ \mathrm{popcount}(3)\ =\ 2,\ \mathrm{popcount}(7)\ =\ 3,\ \mathrm{popcount}(0)\ =\ 0 $。 定义 $ f(n) $ 为将 $ n $ 用 $ \mathrm{popcount}(n) $ 除后取余数替换 $ n $ 的操作次数,直到 $ n $ 变为 $ 0 $ 为止(在这个问题的约束下,可以证明 $ n $ 经过有限次操作后一定会变为 $ 0 $)。 以下是以 $ n=7 $ 为例,经过 2 次操作 $ n $ 变为 0 的过程。 - 因为 $ \mathrm{popcount}(7)=3 $,所以用 3 除 7 后的余数 1 替换 7。 - 因为 $ \mathrm{popcount}(1)=1 $,所以用 1 除 1 后的余数 0 替换 1。 给定一个二进制表示的 $ N $ 位整数 $ X $。对于满足 $ 1\ \leq\ i\ \leq\ N $ 的整数 $ i $,定义将 $ X $ 的第 $ i $ 位取反后的整数为 $ X_i $。求 $ f(X_1),\ f(X_2),\ \ldots,\ f(X_N) $。

输入格式

输入从标准输入中以以下形式给出。 > $ N $ $ X $

输出格式

输出 $ N $ 行。第 $ i $ 行输出 $ f(X_i) $ 的值。 ## 样例 #1 ### 样例输入 #1 ``` 3 011 ``` ### 样例输出 #1 ``` 2 1 1 ``` ## 样例 #2 ### 样例输入 #2 ``` 23 00110111001011011001110 ``` ### 样例输出 #2 ``` 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 3 ```

说明/提示

### 制約 - $ 1\ \leq\ N\ \leq\ 2\ \times\ 10^5 $ - $ X $ 是二进制表示的 $ N $ 位的整数(首位不一定是 '1') ### 样例解释 #1 - $ X_1 $ 是 7。因为 7 变为 1 再变为 0,所以 $ f(7) = 2 $。 - $ X_2 $ 是 1。因为 1 变为 0,所以 $ f(1) = 1 $。 - $ X_3 $ 是 2。因为 2 变为 0,所以 $ f(2) = 1 $。