9 3練習題7 子串乘積正負分類 題解

2022-08-19 21:51:08 字數 1332 閱讀 3911

題目出處:cf 1215b

題目描述

給你乙個序列包含 \(n\) 個元素的序列 \(a_1, a_2, \dots , a_n\) (每個元素 \(a_i \ne 0\))。

你需要計算如下兩個值:

有多少對數 \((l, r) (l \le r)\) 滿足 \(a_l \cdot a_ \dots a_ \cdot a_r\) 的結果為正;

有多少對數 \((l, r) (l \le r)\) 滿足 \(a_l \cdot a_ \dots a_ \cdot a_r\) 的結果為負。

即:這個序列中有多少子串(子串即連續子串行)的乘積為正,有多少子串的乘積為負。

輸入格式

輸入的第一行包含乙個整數 \(n (1 \le n \le 2 \cdot 10^)\) —— 用於表示序列中元素的個數。

輸入的第二行包含 \(n\) 個整數 \(a_1, a_2, \dots , a_n (-10^ \le a_i \le 10^; a_i \neq 0)\) ,用於表示序列中的元素。

輸出格式

輸出兩個正數,以乙個空格分隔。分別表示乘積為正的子串的個數,以及乘積為負的子串的個數。

樣例輸入1

5

5 -3 3 -1 1

樣例輸出1
8 7
樣例輸入2
10

4 2 -4 3 1 2 -4 3 2 3

樣例輸出2
28 27
樣例輸入3
5

-1 -2 -3 -4 -5

樣例輸出3
9 6
問題分析

本體涉及演算法:動態規劃。

這道題目是乙個動態規劃入門題。

我們定義狀態:

可以得到狀態轉移方程為:

當 \(a_i \gt 0\) 時:

實現**如下:

#include using namespace std;

const int maxn = 200020;

int n, a[maxn];

long long f[maxn][2], sum[2]; // f[i][0]表示以a[i]結尾整數數量, meanwhile f[i][2]負數。

int main()

else

for (int j = 0; j < 2; j ++) sum[j] += f[i][j];

}cout << sum[1] << " " << sum[0] << endl;

return 0;

}

MySQL 基礎題練習題 查詢篇 7

資料在本專欄的第一篇部落格裡 sql99標準的連線查詢,左連線就很方便 8.1.查詢編號 3的女神的男朋友資訊,如果有則列出詳細的資訊,如果沒有,則用null填充select be.id,be.name,bo.from beauty be left join boys bo on be.boyfri...

C 練習題 尋找子字串

今天遇到這樣一道題 題目描述 給出字串a和字串b,保證b是a的乙個子串,請你輸出b在a中第一次出現的位置。輸入描述 僅一行包含兩個字串a和b 輸出描述 僅一行乙個整數 樣例輸入 abcd bc 樣例輸出2 兩個字串之間可能包含多個空格。程式 include include using namespa...

訊精選練習題46 最長回文子串

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb class solution 獲取s 0,index 的最大回文子串 如果s 0,index 本身就是回文,那麼...