問題一覧 > 通常問題

No.2145 Segment +-

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 26
作問者 : milkcoffee / テスター : hamamu nok0
7 ProblemId : 8577 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2022-11-25 22:34:39

問題文

長さ NN+,-,? からなる文字列 SS が与えられます。あなたは以下のルールに従って長さ NN の整数列 AA を作ります。

ここで、SiS_i は文字列 SSii 文字目、 AiA_i は整数列 AAii 番目の要素を表します。

  • Si=S_i=+ なら Ai=1A_i=1 にする。
  • Si=S_i=- なら Ai=1A_i=-1 にする。
  • Si=S_i=? なら Ai=1A_i=1 または Ai=1A_i=-1 にする。

作られた AA に対して、以下の問題の答えを f(A)f(A) とします。

長さ NN の整数列 AA があり、 AA に対して以下の操作を行うことができます。

  • 整数 l,r (1lrN)l,r \ (1 \leq l \leq r \leq N) を選び、 Al,Al+1,,ArA_l, A_{l+1}, \cdots , A_r それぞれの値を 1-1 倍する。

以下の条件を達成するために必要な操作回数の最小値を求めてください。

  • 条件:Bi=j=1iAjB_i= \sum_{j=1}^{i} A_j とする。全ての ii について、 Bi0B_i \geq 0 が成り立つ。

f(A)f(A)最小値 を求めてください。

入力

NN
SS

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • SS+,-,? からなる長さ NN の文字列
  • NN は整数である。

出力

f(A)f(A)最小値 を整数で出力してください。

サンプル

サンプル1
入力
5
+--?-
出力
1

AA として考えられるのは (1,1,1,1,1),(1,1,1,1,1)(1,-1,-1,1,-1), (1,-1,-1,-1,-1)22 通りです。
例えば A=(1,1,1,1,1)A=(1,-1,-1,1,-1) のとき、B=(1,0,1,0,1)B=(1,0,-1,0,-1) です。
l=2,r=3l=2, r=3 として操作を行うと A=(1,1,1,1,1)A=(1,1,1,1,-1) B=(1,2,3,4,3)B=(1,2,3,4,3) となります。
11 回の操作で条件を達成することができたため、この場合は f(A)=1f(A)=1 です。
A=(1,1,1,1,1)A=(1,-1,-1,-1,-1) の場合でも f(A)=1f(A)=1 です。よって、f(A)f(A) の最小値は 11 です。

サンプル2
入力
4
??--
出力
0

A=(1,1,1,1)A=(1,1,-1,-1) のときのみ、 f(A)=0f(A)=0 となります。

サンプル3
入力
13
-?+++---?----
出力
2

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。