CF1426D Non-zero Segments

题目描述

Kolya 得到一个整数数组 $a_1, a_2, \dots, a_n$。该数组可以包含正整数和负整数,但 Kolya 不喜欢 $0$,所以数组中不包含任何 $0$。 Kolya 不喜欢他的数组中某些子段的和为 $0$。子段是数组中一段连续的元素。 你需要帮助 Kolya 修改他的数组,使得数组中不包含任何和为 $0$ 的子段。为此,你可以在数组中任意一对相邻元素之间插入任意整数(这些整数可以是正数、负数、$0$,绝对值可以任意大,甚至大到大多数标准编程语言无法表示)。 你的任务是求出,为了使最终数组中不包含任何和为 $0$ 的子段,最少需要插入多少个整数。

输入格式

输入的第一行包含一个整数 $n$($2 \le n \le 200\,000$),表示 Kolya 的数组的元素个数。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($-10^{9} \le a_i \le 10^{9},\ a_i \neq 0$),表示 Kolya 的数组。

输出格式

输出一个整数,表示为了使最终数组中不包含任何和为 $0$ 的子段,最少需要插入多少个整数。

说明/提示

考虑第一个样例。只有一个子段的和为 $0$,它从第二个元素开始,到第四个元素结束。只需插入一个元素即可使数组不包含任何和为 $0$ 的子段。例如,可以在数组的第二个和第三个元素之间插入整数 $1$。 第二个样例中没有任何和为 $0$ 的子段,因此无需进行任何操作。 由 ChatGPT 4.1 翻译