luogu題面
大模擬...並不難(然而考場上寫掛了)
用3 個讀入函式,解決讀入問題
雙棧齊發,乙個記錄使用過的字母,另乙個記錄複雜度貢獻情況
用bre表示當前跳出迴圈的層數
用err表示當前編譯狀態(是否編譯失敗)
s和ans分別表示當前複雜度和總複雜度
那麼當讀取到
'f'
時,我們就要做以下幾點:
讀取迴圈中使用的字母,並判斷其是否被使用過,並將其標記為已使用;
讀取迴圈的起止值,判斷其能否被進入,並且處理好跳出迴圈的層數;
判斷該迴圈對複雜度的貢獻情況,處理好 s 和 ans ;
當讀取到 『e』 時要做以下幾點:
彈出兩棧棧頂元素,將彈出的變數銷毀;
處理好編譯錯誤的情況和迴圈的跳出層數;
**短小精幹(1kb),通俗易懂:
#includeusing
namespace
std;
bool use[256
];stack
q; // 記錄迴圈變數
stack
p; // 記錄迴圈對複雜度的貢獻情況
inline
intgetnum()
inline
char
get()
inline
intgetn()
intmain()
else
while(!q.empty()) err=1
,q.pop(),p.pop(); // 將棧彈空(如果棧非空則編譯錯誤)
printf(err?"
err\n
":ans==f?"
yes\n
":"no\n
"); // 三目運算子簡化**(懶...)
}return
0; // ......
}
by the_seventh
2017-12-24 09:23:53
NOIP2017提高組day2T1題解(乳酪)
這道題還是很水的,在下拿了滿分。並沒有用什麼高階的演算法,我講一下基本思路。我們把每個洞都視為乙個節點。我們讀入相關資料後,就先進行預處理,通過每個節點的資訊和題目的規定,建立一張無向圖,兩個能相通的洞對應的節點之間有一條無向邊,這樣我們就建立好了一張圖。在建圖的時候,我們還需要幹一件事,那就是記錄...
NOIP2017 D1T2 時間複雜度
時間複雜度 題目背景 noip2017 d1t2 分析 模擬 棧 講真因為 t1有點影響心情,考場上打這個題的時候有點混亂,不過好歹最後 a了,雖然 各種不能看,其實就相當於乙個人工棧,乙個 f表示加入,e表示彈出,這樣最後可以比較方便的判定非法,然後中途就是判定有多少個 n,和多少個常數複雜度。然...
NOIP2017 D1T2時間複雜度
這道題在考試時看到感覺與第一題放反了位置 因為我還沒有看到第一題是結論題 對於每個語句進行棧的模擬,而如果有語法錯誤就特判。對於每一條for語句我們將其與棧頂元素連邊,複雜度是1的我們不用考慮,如果複雜度是n我們就算他的貢獻加一。這樣我們求最大複雜度就相當於求一顆子樹的最大深度,當然如果這條語句不合...