Processing math: 29%

Codeforces922 D.Nastya and a Game

给一个n 个数的序列和一个定值 k ,定义一个连续的子序列的乘积为 p ,和为 s ,问满足PS=k 连续的子序列数量 ( 1 ≤ n ≤ 2·10^5, 1 ≤ k ≤ 10^5 ,a_i ≤ 10^8)


题解

题意即为:
\prod_{x=i} ^ {j} a_x = k \sum_{x=i} ^ {j} a_x

直接可以观察到 k \sum_{x=i} ^ {j} a_x ≤ 2·10^{18} 是小于long long ,连乘的话 2^{64} ≈ long long (没有乘 1 ),故处理一下1的麻烦即可,直接暴力每个位置即可,处理的方法不难看出,每个1都会等式右边增加 k , 故直接把所有连续的1的看成一个整体即可,直接暴力,但发现需要处理每个1右端可以延伸的最右的位置,倒着一次 dp 即可