代码:
#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;
}
答题要求:第一问必答,第二,第三问只需回答其中一问即可。
题目:
该代码时间复杂度是?(本人不会计算while循环时间复杂度)
如何修改才能避免TLE?
请给出满分代码。
回复请遵守 答题规范 中的规定。(请在答案前加上题号)
悬关!