FROM WOJ 2748 時間複雜度

2021-09-27 07:35:01 字數 1547 閱讀 4362

以後直接放鏈結了,哈哈蛤……

傳送門

sol

迴圈的結構很簡單:

f i x y

迴圈體e

但是作為一道模擬題這道題的細節很多……

輸入

盡量不要一行直接乙個字串讀完,例如「f i x y」型別的讀入可以考慮先讀入「f」,然後分別讀入後面三個。

另外o(1)可以視作w=0。

中間資訊的統計

用乙個棧來統計中間出現過的迴圈。

讀完題後可以發現每層迴圈的複雜度只有三種情況,三類情況可以分別用0、1、2儲存:

0 不迴圈

1 常數

2 n

該操作的實現詳見**

判斷err

顯然可以直接用棧判斷,然後一行是f語句時top++,e語句時top–,top–時判斷一下是否合法即可,可以有乙個bool變數來記錄是否出現err,這樣以後可以直接continue.

判斷yes/no

由於l

<

=100

l<=100

l<=1

00,顯然可以考慮每次進入e語句時暴力列舉一下棧中所有元素的複雜度即可,注意當遇到未進入的迴圈(x>y)時直接break即可

**:

#include

#define re register

using

namespace std;

const

int n=

100;

int t,l;

char o[10]

,op,i,x[5]

,y[5];

bool vis[26]

;struct nodestk[

101]

;inline

intget

(char

*s,int sum=0)

inline

intcalc

(int m)

return ret;

}signed

main()

vis[i-

'a']=1

,stk[

++top]

.var=i,stk[top]

.tim=yy-xx+1;

if(xx||yy)

continue;if

(get

(x)>

get(y)

)stk[top]

.tim=0;

}else}if

(top)err=1;

if(err)

puts

(ans==w?

"yes"

:"no");

}exit(0

);}

1 時間複雜度

演算法的計算成本涵蓋許多方面,為確定計算成本的度量標準,我們不妨從計算速度這一重要因素入手。但是這一問題並不是容易直接上手回答,原因在於,運算時間是由許多因素綜合作用而決定的。即使是同一演算法,對於不同的輸入所需的運算時間並不相同。問題規模往往是決定計算成本的主要因素。一般的,問題規模越相近,相應的...

0 時間複雜度

快 時間複雜度 省 空間複雜度 def get sum n result 0 for i in range 1,n 1 result i return result假設每行 對應的cpu執行時間一樣,為乙個時間單位unit time 可以看到該函式第2 5行執行1次,第3 4行執行n次 總共執行時間...

演算法01 時間複雜度

演算法,通俗來說,就是被設計出來用於解決某個或某類問題,具有一定通用性的計算流程和方法。解決某個問題,通常有不止一種演算法。評價乙個演算法的優劣,從3個方面進行考察 時間複雜度 額外空間複雜度 常數項時間 通常用最壞時間複雜度 大寫o 來表示乙個演算法的時間複雜度。通常估計乙個演算法的時間複雜度是這...