27分代码,太史山,自己都没眼看,希望有奆帮忙看下
#include<bits/stdc++.h>
using namespace std;
int t, n;
bool bz[120];
string O, s[120];
int main() {
cin >> t;
while (t--) {
cin >> n;
O = "";
memset(bz, 0, sizeof bz);
getline(cin, O);
int num = 1;
for (int i = 0; i < O.size(); i++) {//计算给出的时间复杂度
if (O[i] == '1') {
num = 1;
break;
} else if (O[i] == 'n') {
num = pow(101, (O[i + 2] - '0'));//用101代表N
break;
}
}
// cout << num << endl;
for (int i = 1; i <= n; i++)
getline(cin, s[i]);
int tmp = 1;
int flag = 0;
if (n == 1) {//如果只有一行,代表没有E,输出
cout << "ERR" << endl;
continue;
}
for (int i = 1; i < n; i++) {
if (s[i][0] == 'E') continue;
if (bz[i]) {
if (s[i + 1][0] != 'E') bz[i + 1] = 1;
continue;
}
if (s[i][0] == 'F' && s[i + 1][0] == 'F') {
if (s[i + 1][2] == s[i][2]) {
cout << "ERR";
flag = 2;
break;
}
if (s[i][4] == 'n' && s[i][s[i].size() - 1] != 'n') {//如果是这样循环的 :F X N 1 当前这个循环和嵌套的循环就没有必要走了
bz[i] = 1;
bz[i + 1] = 1;
} else if (s[i][4] != 'n' && s[i][s[i].size() - 1] == 'n')//计算时间复杂度
tmp *= 101;
} else if (s[i][0] == 'F' && s[i + 1][0] == 'E') {//如果到了最里面的一层,计算答案
if (s[i][4] != 'n' && s[i][s[i].size() - 1] == 'n')
tmp *= 101;
if (tmp != num) {
flag = 1;
break;
} else {
tmp = 1;
}
} else {
cout << "ERR" << endl;
flag = 2;
break ;
}
}
if (flag == 1) {
cout << "No" << endl;
} else if (flag == 0) {
cout << "Yes" << endl;
}
}
return 0;
}