托公尺的簡單表示法

2021-09-16 22:42:49 字數 1222 閱讀 9626

托公尺的簡單表示法

題目描述

作為故事主角的托公尺是一名老師。

一天,他正在為解析算術表示式的課程準備課件。 在課程的第一部分,他只想專注於解析括號。 他為他的學生發明了乙個有趣的正確括號序列的幾何表示,如下圖所示:

幾何表示的定義:

1.對於乙個括號序列a,我們定義g(a)是a的幾何表示形式,則

"()「的表示是乙個1*1的方塊,高度為1;

2.對於乙個括號序列a,」(a)"的表示是由乙個比g(a)寬2個單位高1個單位的矩形包圍g(a),它的高度為a+1;

3.對於兩個括號序列a和b,a+b的幾何表示形式為把g(b)放置在g(a)右邊的乙個單位,且高度為a和b的高度的較大值。

其中+指的是字串的連線符。

在完成課件後,托公尺老師開始玩他做好的。 他將影象的有限區域交替地塗成黑色和白色,使最外面的區域全部塗成黑色。 對於上面的例子,這個著色如下所示:

現在給你乙個合法的括號序列。 請計算顏色為黑色的區域的面積。

輸入描述:

輸入的第一行包含乙個整數t,表示指定測試用例的數量。

每個測試用例前面都有乙個空白行。

每個測試用例由乙個合法括號序列組成。 每行只包含字元』(『和』)』。

輸出描述:

對於每個測試用例,輸出一行包含乙個整數,表示相應幾何表示的黑色部分的面積。

示例1輸入複製2

(())(()(()))

輸出複製

1020

說明第二個測試案例是上圖中顯示的案例。

備註:1≤t≤10

乙個合法括號序列長度≤4 x 105

**:

#include

#include

#include

using

namespace std;

#define ll long long

const

int n =

4e5+10;

char s[n]

;ll sum[n]

;int h[n]

, w[n]

;int

dfs(

int i)

sum[i]

=1ll

*w[i]

*h[i]

-sum[i]

;return j+1;

}int

main()

cout

}

托公尺的簡單表示法 (dfs)

時間限制 c c 1秒,其他語言2秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 作為故事主角的托公尺是一名老師。一天,他正在為解析算術表示式的課程準備課件。在課程的第一部分,他只想專注於解析括號。他為他的學生發明了乙個有趣的正確括號序列的幾何...

nowcoder16450 托公尺的簡單表示法

題目鏈結 仔細理解一下題意可以發現。對於每個完整的括號序列都是獨立的,然後就想到分治。高度是序列中所有括號序列的最大值,寬度是所有括號序列寬度和 1 然後仔細想了一下,這種分治應該是可以被卡成 n 2 的。題解就比較厲害了。其實基本思想和分治相似。建立一棵樹的模型。每到乙個左括號就給當前節點新增乙個...

托公尺的遊戲

題目 托公尺有一棵有根樹t tt,樹根為1 11,每輪他會在剩下的子樹中等概率乙個點 u uu,砍掉u uu的子樹 包含u uu 如果樹上的點都被砍光了,遊戲結束.求出這個遊戲進行的期望輪數,可以證明這個數一定是有理數,設他為 a b frac ba 你需要告訴他乙個整數x xx滿足 x b a m...