Codeforces 1215 B. The Number of Products

在这里插入图片描述

题意:

给你一个值都不为零的数组,分别找出有多少个连续的子串乘积小于零,大于零。

从首开始找负数字串,即有一个负数后,在下一个负数前这里面的都是负数子串。而其他的就为正数子串,正数子串初始化应为 1 1 ,所以得的正数子串最后应加上 1 1 。两个负数作为边上的元素的子串也可看为一个正数子串,负数子串和正数子串的乘积即为子串乘积为负数的数量。,例如 1 2 3 4 -1,2,3,-4 这个数组,它的负数子串为 3 3 ,正数子串为 2 2 3 × 2 = 3 3×2=3 ,这个 2 2 ,一个是 1 -1 ,一个是 4 -4 。。负数个数出来了,用总数 n × ( n + 1 ) 2 \frac{n×(n+1)}{2} 减去负数个数便是正数的个数。

AC代码:

ll n, m, x;
ll res, ans1, ans2;
int main()
{
	sld(n);
	ll cnt1 = 0, cnt2 = 1, t = 1;
	rep(i, 1, n)
	{
		sld(x);
		if (x < 0)
			t *= -1;
		if (t > 0)
			cnt2++;
		else
			cnt1++;
	}
	pldd(cnt1 * cnt2, n * (n + 1) / 2 - cnt1 * cnt2);
	return 0;
}
发布了786 篇原创文章 · 获赞 460 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/qq_43627087/article/details/105208613