時間複雜度
題目背景:
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 時,我們就要做以下幾點 讀取迴...