NOIP2017 D1T2 時間複雜度

2021-08-13 18:06:49 字數 2228 閱讀 2075

時間複雜度

題目背景:

noip2017 d1t2

分析:模擬+ 棧

講真因為

t1有點影響心情,考場上打這個題的時候有點混亂,不過好歹最後

a了,雖然**各種不能看,其實就相當於乙個人工棧,乙個

f表示加入,

e表示彈出,這樣最後可以比較方便的判定非法,然後中途就是判定有多少個

n,和多少個常數複雜度。然後判定一下

n的個數對不對就好了,因為自己人比較

zz,所以實現非常繁瑣······

source

/*

created by scarlyw

*/#include #include #include #include #include #include #include #include #include templateinline void r(t &x)

for (x = 0; isdigit(c); c = getchar())

x = ((x << 2) + x << 1) + (c ^ '0');

if (iosig) x = -x;

}char c[10], temp;

bool flag;

bool vis[30];

int x, y, cnt, l, t;

inline int dfs(int cnt, int num, int cc)

char x = 0;

while (x > 'z' || x < 'a') x = getchar();

if (vis[x - 'a'] == true) flag = false;

else vis[x - 'a'] = true;

char a[10], b[10];

scanf("%s%s", a, b);

int d = -1;

if (a[0] == 'n' && b[0] == 'n') d = 1;

else if (a[0] == 'n' && b[0] != 'n') d = -1;

else if (a[0] != 'n' && b[0] == 'n') d = 2;

else if (a[0] != 'n' && b[0] != 'n')

if (::cnt == l)

if (d == -1) max = std::max(max, dfs(0, 0, x - 'a'));

else if (d == 1) max = std::max(max, dfs(0, 1, x - 'a'));

else if (d == 2) max = std::max(max, dfs(1, 1, x - 'a'));

if (::cnt == l) }}

inline void solve()

char x = 0;

while (x > 'z' || x < 'a') x = getchar();

if (vis[x - 'a'] == true) flag = false;

else vis[x - 'a'] = true;

char a[10], b[10];

scanf("%s%s", a, b);

int d = -1;

if (a[0] == 'n' && b[0] == 'n') d = 1;

else if (a[0] == 'n' && b[0] != 'n') d = -1;

else if (a[0] != 'n' && b[0] == 'n') d = 2;

else if (a[0] != 'n' && b[0] != 'n')

if (cnt == l)

if (d == -1) ans = std::max(ans, dfs(0, 0, x - 'a'));

else if (d == 1) ans = std::max(ans, dfs(0, 1, x - 'a'));

else ans = std::max(ans, dfs(1, 1, x - 'a'));

if (cnt == l) break ;

} if (flag == false) std::cout << "err\n";

else if (ans == y) std::cout << "yes\n";

else std::cout << "no\n";

}int main()

NOIP2017 D1T2時間複雜度

這道題在考試時看到感覺與第一題放反了位置 因為我還沒有看到第一題是結論題 對於每個語句進行棧的模擬,而如果有語法錯誤就特判。對於每一條for語句我們將其與棧頂元素連邊,複雜度是1的我們不用考慮,如果複雜度是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 時,我們就要做以下幾點 讀取迴...