題解 LuoGu3952 時間複雜度

2021-09-29 15:35:14 字數 1161 閱讀 3380

原題傳送門

寫的我一口老血

你得先想好

什麼時候會err

\text

err

然後你得知道當前的迴圈到底有沒有用

具體來說是這個迴圈的外面是否有類似

f i 100 1 或 f i n 100

\text

f i 100 1 

或f i n 100

的情況那麼需要乙個記錄外面依然有幾個這樣的迴圈的變數can

no

tcannot

cannot

接著你要明確當前是否巢狀n

nn以及已經巢狀了幾層n

nn那麼我又要處理x,y

x,yx,

y的大小關係,以及乙個記錄巢狀層數的變數cyc

lenu

mcyclenum

cyclen

um,記錄答案max

nu

mmaxnum

maxnum

最後你e

ee的時候根據當前是否在無用迴圈裡面(can

no

tcannot

cannot

還不為0)或者當前結束的迴圈到底有沒有巢狀出乙個n來決定是否--cyclenum;--cannot

梳理了一下感覺這個模擬題目就十分清晰有沒有

但是還是千萬記住一點,別再中途bre

ak

break

brea

k,否則你讀不完

code:

#include

#define maxn 10010

using

namespace std;

char s[maxn]

;struct nodea[maxn]

;int used[maxn]

, n;

intmain()

else;}

}if(tot || iferror)

puts

("err");

else

if(maxtime == goal)

puts

("yes");

else

puts

("no");

}return0;

}

luogu 3952 時間複雜度(模擬)

這道題從兩個月前開始做,一直沒做出來,最後今晚決心一定要做出來。於是開始認真的在打草紙上寫思路,最後在ac的那一刻,差點哭了出來!這個自己看吧,noip2017的d1t2 先介紹一下這道題我們用到的每個變數他們的用處 stack記錄變數的迴圈層 vis記錄變數在棧中是否出現過 cmp函式,這個可以用...

luogu P3952 時間複雜度 題解

對於2017 d1 t2 這道題 實實在在是個碼力題,非常考驗耐心。其實大體的思路並不是非常難想出來,但是要注意的小細節比較多。對於每乙個程式,先讀入l和o 並將其中的時間複雜度摳出來。其次整行讀入字串,即所給定的程式。判斷第乙個字元是f or e f i x y 需要把x y拿出來,把i壓進棧 e...

P3952 時間複雜度

看到這種又是字串又是模擬的題目就很傷,很多的地方都考驗細節。看到這種處理迴圈的方式是後進先出,自然想到了用棧來模擬。但是最主要的思路是怎麼算複雜度?其實說白了也簡單 乙個迴圈的複雜度 這個迴圈本身的複雜度 在裡面巢狀的最大的複雜度 這裡的每乙個迴圈變數都是不重複的,如果重複直接判err。那麼我們就可...