洛谷P3952 时间复杂度(模拟)
程序员文章站
2022-06-22 11:19:21
题意 "题目链接" Sol 咕了一年的题解。。就是个模拟吧 考场上写的递归也是醉了。。。 感觉一年自己进步了不少啊。。~~面向数据编程的能力提高了不少~~ ......
题意
sol
咕了一年的题解。。就是个模拟吧
考场上写的递归也是醉了。。。
感觉一年自己进步了不少啊。。面向数据编程的能力提高了不少
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair using namespace std; const int maxn = 101; int t, top = 0, now, mx, flag; pair<char, int> st[maxn];// first 字符 second 是否算作复杂度 1 算 0不算 void init() { top = 0;//已经用过哪些字符 now = 0;//当前进入了几层循环 mx = 0;//最大循环层数 flag = 0; } int get(char *s) { int l = strlen(s + 1), x = 0; for(int i = 1; i <= l; i++) if(s[i] >= '0' && s[i] <= '9') x = x * 10 + s[i] - '0'; return x; } char getopt() { char c = ' '; while(c != 'e' && c != 'f') c = getchar(); return c == 'f' ? 1 : 0;// 1 enter 0 end } int readround() {//n = -1 char c = ' '; int x = 0; while(c != 'n' && (c < '0' || c > '9')) c = getchar(); if(c == 'n') return -1; while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x; } int readbuf() {// 1 n 0常数 -1重名 char c = getchar(); while(c < 'a' || c > 'z') c = getchar(); int bg = readround(), ed = readround(); for(int i = 1; i <= top; i++) if(st[i].fi == c) return -1; if((bg != -1 && ed != -1 && bg > ed) || (bg == -1 && ed != -1)) {flag = 1, st[++top] = mp(' ', -1); return 0;}//不进入循环 if(bg != -1 && ed == -1) {//非常数循环 if(flag == 0) now++, mx = max(now, mx), st[++top] = mp(c, 1); else st[++top] = mp(c, 0); } else { st[++top] = mp(c, 0); } return 0; } int solve() {// 1 yes 0 no -1 err int l, w = 0, gg = 0; char s[233]; scanf("%d %s", &l, s + 1); if(s[3] == 'n') w = get(s + 1); for(int i = 1; i <= l; i++) { int opt = getopt(); if(opt == 0) { if(top == 0) gg = -1; else { if(st[top].se == -1) flag = 0; if(st[top--].se == 1) now--; } } else { int tmp = readbuf(); if(tmp == -1) gg = -1; } } if(gg == -1) return -1; if(top) return -1; else return mx == w; } int main() { cin >> t; while(t--) { init(); int tmp = solve(); if(tmp == 1) puts("yes"); else if(tmp == 0) puts("no"); else puts("err"); } return 0; } /* 1 2 o(n^1) f a n n e */
推荐阅读
-
洛谷CSP-J/S2020初赛模拟部分题解
-
[模拟] [洛谷] P1094 纪念品分组
-
洛谷:P3913 车的攻击(普及-)------想用的map和set原来还可以这样替换,而且时间复杂度降了下来。
-
洛谷:玩具谜题(P1563,模拟)
-
洛谷P1003 铺地毯(简单模拟)
-
洛谷 P1003 铺地毯 【简单模拟】
-
[洛谷]P2879 [USACO07JAN]区间统计Tallest Cow (#模拟)
-
洛谷 P1204 [USACO1.2]挤牛奶Milking Cows(模拟)
-
【模拟】洛谷 P1204 [USACO1.2]挤牛奶Milking Cows
-
【题解】洛谷P4851[非酋yyf的sif之旅]A.yyf hates ganhuodong 模拟