题目链接: http://codeforces.com/problemset/problem/1215/B
题目大意:在n个不含0的数中,求有多少连续的子串的乘积小于零,有多少连续的子串的乘积大于零。
1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 5 const int maxn = 2e5 + 10; 6 7 int n; 8 long long dp_pos[maxn], dp_neg[maxn]; 9 // dp_pos[i]表示 以a[i]为区间末尾 区间积为正的 区间左端点数目 10 // dp_neg[i]表示 以a[i]为区间结尾 区间积为负的 区间左端点数目 11 12 int main(){ 13 scanf("%d", &n); 14 dp_pos[0] = 0; dp_neg[0] = 0; 15 long long ans_pos = 0, ans_neg = 0; 16 for(int i = 1; i <= n; i++){ 17 int x; 18 scanf("%d", &x); 19 if(x > 0){ 20 dp_pos[i] = dp_pos[i - 1] + 1; 21 dp_neg[i] = dp_neg[i - 1]; 22 } 23 if(x < 0){ 24 dp_pos[i] = dp_neg[i - 1]; 25 dp_neg[i] = dp_pos[i - 1] + 1; 26 } 27 ans_pos += dp_pos[i]; 28 ans_neg += dp_neg[i]; 29 } 30 // for(int i = 1; i <= n; i++){ 31 // printf("pos: %lld, neg: %lld\n", dp_pos[i], dp_neg[i]); 32 // } 33 printf("%lld %lld\n", ans_neg, ans_pos); 34 return 0; 35 }
Codeforces Round #585 (Div. 2) B. The Number of Products
原文:https://www.cnblogs.com/mrzhangziheng/p/11572347.html