以後直接放鏈結了,哈哈蛤……傳送門
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 來表示乙個演算法的時間複雜度。通常估計乙個演算法的時間複雜度是這...