托公尺的簡單表示法
題目描述
作為故事主角的托公尺是一名老師。
一天,他正在為解析算術表示式的課程準備課件。 在課程的第一部分,他只想專注於解析括號。 他為他的學生發明了乙個有趣的正確括號序列的幾何表示,如下圖所示:
幾何表示的定義:
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...