求调
  • 板块灌水区
  • 楼主hymcr05
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/11 14:20
  • 上次更新2024/8/11 15:38:56
查看原帖
求调
947007
hymcr05楼主2024/8/11 14:20

P3952 时间复杂度

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;
}

2024/8/11 14:20
加载中...