代码阅读题(求助,请大佬们帮忙看看)
查看原帖
代码阅读题(求助,请大佬们帮忙看看)
1206388
pengjingfei267楼主2024/10/23 16:42

题目内容

代码:

#include <bits/stdc++.h>
using namespace std;

struct card {
	long long front, back;
} a[200001];
int b[200001], n, k;

bool dp[200001] = {false};

string Ctrl_R_flag() {
	for (int i = 2; i < n; i++) {
		if (abs(b[i - 1] - b[i]) > k) {
			return "No";
		}
	}
	return "Yes";
}

int num(bool *bin, int len) {
	int num = 0;
	for (int i = 1; i <= len; i++) {
		num += bin[i] * pow(2, i);
	}
	return num;
}

void add(bool *bin) {
	int i = 0;
	while (bin[i] != 1) {
		bin[++i] = !bin[i];
	}
}

int main() {
	cin >> n >> k;
	if (n == 1) {
		int _;
		cin >> _ >> _;
		cout << "Yes";
		return 0;
	}
	for (int i = 1; i <= n; i++) {
		cin >> a[i].front;
		b[i] = a[i].front;
	}
	for (int i = 1; i <= n; i++) {
		cin >> a[i].back;
	}
	string flag = "No";
	while (num(dp, n) != pow(2, n) - 1) {
		flag = Ctrl_R_flag();
		if (flag == "Yes") {
			break;
		}
		add(dp);
		for (int i = 1; i <= n; i++) {
			if (dp[i]) {
				b[i] = a[i].back;
			} else {
				b[i] = a[i].front;
			}
		}
	}
	cout << flag;
	return 0;
}

答题要求:第一问必答,第二,第三问只需回答其中一问即可。

题目:

  1. 该代码时间复杂度是?(本人不会计算while循环时间复杂度)

  2. 如何修改才能避免TLE

  3. 请给出满分代码。

回复请遵守 答题规范 中的规定。(请在答案前加上题号)

悬关!

2024/10/23 16:42
加载中...