NOIP2017 D1T2時間複雜度

2022-03-27 08:53:44 字數 1555 閱讀 9161

這道題在考試時看到感覺與第一題放反了位置(因為我還沒有看到第一題是結論題)

對於每個語句進行棧的模擬,而如果有語法錯誤就特判。

對於每一條for語句我們將其與棧頂元素連邊,複雜度是1的我們不用考慮,如果複雜度是n我們就算他的貢獻加一。

這樣我們求最大複雜度就相當於求一顆子樹的最大深度,當然如果這條語句不合法我們就將其整顆子樹貢獻算為0。

1                         #include2

using

namespace

std;

3int

top;

4struct

node

5e[1000005];8

int cnt,head[10005];9

void add(int x,int

y)10

13int inf=1e9;

14struct

poin

15a[100005

];18 stackqq;

19int dfs(int

x)20

29return ma+pre;30}

31char s[100

];32

bool b[10000

];33

int q[10005

];34

intmain()

3553

if(s[2]!='

n')x=0;54

for(int i=1;i<=n;++i)

55int u=0,v=0;int w=0,z=0

;63 b[d]=1;q[++top]=d;

64 scanf("

%s",&s);

65if(s[0]=='

n')w=inf;

66else

67 scanf("

%s",&s);

68if(s[0]=='

n')z=inf;

69else

70 a[i].l=w;a[i].r=z;a[i].id=i;

7172

73if

(qq.empty())

74 add(0

,i);

75else

add(qq.top().id,i);

76qq.push(a[i]);

7778}79

else

8083}84

}85if(!qq.empty())flag=1;86

if(flag)

89int ans=dfs(0

);90

if(ans!=x)puts("no"

);91

else puts("

yes"

);92}93

return0;

94}95

考試時我沒有求max而是算的sum

還好noip資料水讓我混了90分,謝天謝地。

NOIP2017 D1T2 時間複雜度

時間複雜度 題目背景 noip2017 d1t2 分析 模擬 棧 講真因為 t1有點影響心情,考場上打這個題的時候有點混亂,不過好歹最後 a了,雖然 各種不能看,其實就相當於乙個人工棧,乙個 f表示加入,e表示彈出,這樣最後可以比較方便的判定非法,然後中途就是判定有多少個 n,和多少個常數複雜度。然...

NOIP2017 D1T2 時間複雜度

洛谷p3952 這一道模擬題是真的特別考細心的一道題 調了半天才調出來 要是今年noip考到這樣的模擬題我可能就涼涼 設變數ci i 表示第i層的時間複雜度是o n ci i 對於每次進入乙個迴圈 f 我們考慮這麼幾種情況 1 此層迴圈不會執行 外層迴圈x y 只需判斷此層迴圈是否有語法錯誤 變數重...

NOIP 2017 Day1 T2 時間複雜度

luogu題面 大模擬.並不難 然而考場上寫掛了 用3 個讀入函式,解決讀入問題 雙棧齊發,乙個記錄使用過的字母,另乙個記錄複雜度貢獻情況 用bre表示當前跳出迴圈的層數 用err表示當前編譯狀態 是否編譯失敗 s和ans分別表示當前複雜度和總複雜度 那麼當讀取到 f 時,我們就要做以下幾點 讀取迴...