NANDrepeatedly

[ABC310E] NAND repeatedly

规律

  1. 对于每个 \(0\),答案必为 \(1\)。(开头除外)
  2. 对于每个连续的 \(1\) 段,必定为 \(01\) 交替。(\(1\) 在第一/二个的 \(1\) 段除外,为 \(10\) 交替)。

这两点比较显然,在此不给出证明。

考虑每次删去头部元素会产生的影响;

  1. 如果前两个是 \(0,1\),本来 \(0\barwedge1=1,1=1\),无影响。

  2. \(1,0\),答案先 \(-2\)(因为本来少了 \(1\),又因为 \(1,0\) 的运算没了),其次,如果此时的第三位是 \(1\),那么如果这个连续段的 \(1\) 个数为奇数,答案再增加 \(1\)

  3. \(0,0\),先 \(-1\),然后同 2.

  4. \(1,1\),如果第三位是 \(0\),无影响(\(1,1,0\),答案为 \(1,0,1\)\(1,0\)\(1,1\))。如果第三位为 \(1\),算上前两个一共连续偶数个,则不变,否则 \(-1\)

综上,每次维护处理到的第三位往后连续 \(1\) 个数即可。

复杂度 \(O(n)\)

处理时需格外注意开头就是 \(1\) 的连续段。

AC

posted @ 2023-07-20 16:49  wscqwq  阅读(9)  评论(0编辑  收藏  举报