‘壹’ 蓝桥杯2021年第十二届国赛真题-和与乘积
蓝桥杯2021年第十二届国赛真题要求我们解决一个关于数列的问题:给定一个整数数列 A = (a1, a2, ..., an),计算满足区间内元素乘积等于和的区间的个数,即存在某个区间 [L, R],满足 aL * aL+1 * ... * aR = aL + aL+1 + ... + aR。
输入部分包括两个步骤:首先,读取一个整数 n,表示数列的长度;接着,读入 n 个整数,表示数列的元素。输出则是一个整数,表示满足条件的区间个数。
解题思路涉及构建三个同步数组:one[]、num[] 和 onone[]。one[] 用于记录每个非1元素前连续1的数量,num[] 存储每个非1元素前所有1的数量累加,onone[] 则是直接存储非1的数。通过累乘和累和的对比,我们可以找出满足条件的区间。具体来说,计算 (num[j] - num[i - 1] - one[i]) 代表至少包含两个数的乘积和和,然后根据左右两侧1的数量与d(乘积与和的差值)的比较,确定符合条件的区间数量。
总结来说,代码中通过巧妙的数组操作和判断条件,实现了对区间乘积等于和的计数,对于数列中每个元素组合的处理都十分精确。理解了这些步骤,你应该能够透彻理解题目的解题方法。