NOIP 2017 Day1 T2 時間複雜度

2022-08-21 03:12:13 字數 1485 閱讀 6946

luogu題面

大模擬...並不難(然而考場上寫掛了)

3 個讀入函式,解決讀入問題

雙棧齊發,乙個記錄使用過的字母,另乙個記錄複雜度貢獻情況

bre表示當前跳出迴圈的層數

err表示當前編譯狀態是否編譯失敗

sans分別表示當前複雜度總複雜度

那麼當讀取到 

'f

時,我們就要做以下幾點

讀取迴圈中使用的字母,並判斷其是否被使用過,並將其標記為已使用;

讀取迴圈的起止值,判斷其能否被進入,並且處理好跳出迴圈的層數;

判斷該迴圈對複雜度的貢獻情況,處理好 s 和 ans ;

當讀取到 『e』 時要做以下幾點

彈出兩棧棧頂元素,將彈出的變數銷毀;

處理好編譯錯誤的情況和迴圈的跳出層數;

**短小精幹(1kb),通俗易懂:

#include

using

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我們就算他的貢獻加一。這樣我們求最大複雜度就相當於求一顆子樹的最大深度,當然如果這條語句不合...