在给定序列中,一个子段平衡意味着该连续子段内所有元素的乘积等于所有元素的按位异或和。分析可知,若子段中包含至少两个大于1的数,乘积会快速增大,必然大于异或和,不可能相等。因此平衡子段只有两种可能:
全为 1 的子段:
乘积恒为 1。异或和取决于 1 的个数:奇数个 1 的异或和为 1,偶数个为 0。
因此只有当 1 的个数为奇数时,乘积等于异或和,子段平衡。
恰好包含一个大于 1 的数(记作 x),其余元素全为 1 的子段:
小蓝在研究一个由正整数构成的序列,他定义了一种特殊的“平衡子段”:一个连续非空子段,如果它的所有元素的乘积与所有元素的按位异或结果相等,那么这个子段就是平衡的。现在小蓝想知道,给定的序列中一共有多少个不同的平衡子段。请帮他统计一下。
序列的长度不超过 105,序列中的每个数均为正整数且不超过 109。
输入分为两行。第一行包含一个整数 n,表示序列的长度。第二行包含 n 个整数,依次表示序列中的元素,数字之间用空格分隔。
输出一个整数,表示满足条件的平衡子段的数量。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册