這道題在考試時看到感覺與第一題放反了位置(因為我還沒有看到第一題是結論題)
對於每個語句進行棧的模擬,而如果有語法錯誤就特判。
對於每一條for語句我們將其與棧頂元素連邊,複雜度是1的我們不用考慮,如果複雜度是n我們就算他的貢獻加一。
這樣我們求最大複雜度就相當於求一顆子樹的最大深度,當然如果這條語句不合法我們就將其整顆子樹貢獻算為0。
1 #include2using
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 時,我們就要做以下幾點 讀取迴...