noip 2017 時間複雜度題解

2021-08-28 13:04:33 字數 1367 閱讀 2381

自認為是少有的複雜的**

這題思想很簡單,就是大模擬

對於for迴圈,一行讀入4個字串,然後分類討論:

①:如果是乙個正常的o(n),那麼累計n的指數加1

②:如果是乙個常數級別的,那麼繼續迴圈,但是不累計指數

③:如果這個迴圈是從n到常數,或大常數到小常數,那麼這個迴圈及它內部的迴圈都不進,打好標記不要累計

④:至於如何防止變數的重複使用:將用過的變數放進棧裡並打上標記,迴圈結束時出棧清標記即可

⑤:還要注意一些小細節:迴圈層數只計最深的一層,所以我們用乙個累計變數cnt,每次結束迴圈考慮迴圈的情況:如果這個迴圈被累計了,cnt--,否則cnt不變,所以我們還要開乙個棧,記錄每個迴圈的情況(與存變數的棧同步使用即可)

剩下就好辦了:

#include #include #include #include #include #include #include #include using namespace std;

char s[10];

char s1[10],s2[10];

char tt[10];

bool used[130];

int n;

stack q;

stack m;

int main()

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

continue;

}if(s[0]=='e')

else

else if(y==2)

m.pop();

}}else

used[s[0]]=1;

q.push(s[0]);

scanf("%s",s1);

scanf("%s",s2);

flag++;

if(s1[0]-'0'<=9&&s2[0]-'0'<=9&&s1[0]-'0'>=0&&s2[0]-'0'>=0)

int y=0;

j=0;

while(s2[j]-'0'<=9&&s2[j]-'0'>=0)

if(x>y)

else

continue;

}else if(s2[0]-'0'<=9&&s2[0]-'0'>=0)

else

if(!flag2)

else

maxcnt=max(maxcnt,cnt);}}

}if(flag)

if(flag0)

else if(maxcnt==0&&tt[2]=='1')

else

if(x==maxcnt)

printf("no\n");

continue;}}

return 0;

}

NOIP2017 時間複雜度

最近做的最簡單的一道模擬題orz 終於把noip2017的都搞完了。這道理有幾個需要注意的小細節 1.注意 f i n n的情況,相當與常數。2.在不迴圈的部分也要記得判斷是否重複變數 3.兩個常數的時候記得比大小 其他也就沒啥了。考noip2017的時候棧是什麼都不知道,只知道zz模擬,也不知道怎...

NOIP2017 時間複雜度

傳送門 這道題我去年做到 最後還是爆零了,現在我還是特別慢才寫完 唯一不同就是現在思路比較清晰,但是我的做法比較複雜,很長。我們要處理以下事情 1.讀入程式行數,得到該程式時間複雜度。這個很簡單,我的方法是寫乙個函式判斷一下,然後返回當前時間,如果是常數級就是0.2.讀入程式,判斷是否合法。這一步判...

NOIP 2017 時間複雜度

題目鏈結 去年考試這道題貌似20分 今天又寫,怒幹1個半小時,一次ac 重點是靜下心來,理清思路,知道要幹什麼 然後慢慢地查錯 之後自己造一些比較難的資料來測 這種細節巨多的題就要靜下來,就好了 include define rep i,a,b for register int i a i b i ...