题目信息
题目传送门
解题思路
一层循环可能:
错误的原因有:
特别注意
注意不要忽略那些不会执行的循环,因为如果里面语法有bug的话就凉凉了。。
代码实现
#include <bits/stdc++.h>
using namespace std;
int n, t;
char L[105], s[105];
bool A[105], B[105], WA;
int flag, res, pre;
int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%d%s", &n, L);
if (L[2] == '1') {
flag = false;
} else {
sscanf(L, "O(n^%d)", &flag);
}
res = pre = t = 0;
WA = false;
while (n--) {
scanf("\n%[^\n]", L);
if (WA == true) {
continue;
}
if (*L == 'E') {
if (!t) {
WA = true;
}
if (B[t--] == true) {
--pre;
}
} else {
int l = strlen(L);
++t;
for (int i = 1; i < t; ++i) {
if (s[i] == L[2]) {
WA = true;
}
}
if (A[t - 1] == true || (L[4] == 'n' && L[l - 1] != 'n')) {
A[t] = true;
} else {
A[t] = false;
}
if (L[l - 1] != 'n' && L[4] != 'n') {
int a, b;
sscanf(L, "%*s%*s%d%d", &a, &b);
if (a > b) {
A[t] = true;
}
}
if (L[l - 1] == 'n' && L[4] != 'n') {
B[t] = true;
pre++;
} else {
B[t] = false;
}
s[t] = L[2];
if (A[t] <= 0 && res < pre) {
res = pre;
}
}
}
if (t > 0) {
WA = true;
}
if (WA) {
printf("ERR\n");
} else {
if (res == flag) {
printf("Yes\n");
} else {
printf("No\n");
}
}
}
return 0;
}