[BJOI2018] двоичное решение проблемы

Ссылка на тему

Тема Описание:

pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 的倍数。他想研究对于二进制,是否也有类似的性质。
于是他生成了一个长为n 的二进制串,希望你对于这个二进制串的一个子区间,能求出其有多少位置不同的连续子串,满足在重新排列后(可包含前导0)是一个3 的倍数。
两个位置不同的子区间指开始位置不同或结束位置不同。
由于他想尝试尽量多的情况,他有时会修改串中的一个位置,并且会进行多次询问。

Рассмотрим первую вложенную задачу: определить подстроки удовлетворяют условию.
Во- первых, метод двоичного файла в десятичных битов × соответствующий бит вес.
Может быть найден, долото \ (mod3 \) значения \ (1,2,1,2 \) попеременно.
Подстроки при условии наличия х 1 на 2, Y 1 на двух должны соответствовать \ ((2x + Y) = 0 mod 3 \) , т.е. \ (х = у (MOD3) \) .
Длина подстроки расположена Len, есть с 1.
Так, жадные хочет, х и у разности 0 или 3.
Пункты обсуждения:

  1. \ (Len \% 2 = 0 \) , \ (S = 2% 0 \) . Необходимость удовлетворять \ (S / 2 <= LEN / 2 \) , то это будет очевидно.
  2. \ (Len = 0% 2 \) , \ (S = 2%. 1 \) . То \ (X + Y = S, = XY. 3 \) , для решения \ (X = (S +. 3) / 2 \) . Нужно , чтобы удовлетворить \ ((S +. 3) / 2 <= LEN / 2 \) , т.е. \ (S <=. 3-Len \) .
  3. \ (LEN = 2%. 1 \) , \ (S = 2% 0 \) . Нужно , чтобы удовлетворить \ (S / 2 <= (len-. 1) / 2 \) , то будет очевидно.
  4. \ (LEN = 2%. 1 \) , \ (S = 2%. 1 \) . Аналогичным образом , \ (Х = (S +. 3) / 2 \) . Нужно , чтобы удовлетворить \ ((S +. 3) / 2 <= (Len +. 1) / 2 \) , т.е. \ (S <= LEN-2 \) .
    Может быть найден, то он будет , когда s является четным числом. s нечетно сложный, трудно рассчитывать (потому что даже если есть много Len установлен, удовлетворяют требования с, интервал может не быть объединен).
    Рассмотрим включения-исключения, просят не законны.
    Если не действует, то \ (S = 2%. 1 \) .

рекомендация

отwww.cnblogs.com/lnzwz/p/11348249.html