包对的
2025-10-28 17:08:54
发布于:浙江
0阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> graph;
vector<int> color;
bool dfs(int node, int c) {
color[node] = c;
for (int neighbor : graph[node]) {
if (color[neighbor] == -1) {
if (!dfs(neighbor, 1 - c)) return false;
} else if (color[neighbor] == c) {
return false;
}
}
return true;
}
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
vector<int> f(n + 1);
f[n] = n + 1;
for (int i = n - 1; i >= 0; i--) {
f[i] = min(a[i], f[i + 1]);
}
graph.resize(n);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (a[i] < a[j] && f[j + 1] < a[i]) {
graph[i].push_back(j);
graph[j].push_back(i);
}
}
}
color.assign(n, -1);
for (int i = 0; i < n; i++) {
if (color[i] == -1) {
if (!dfs(i, 0)) {
cout << 0;
return 0;
}
}
}
vector<int> s1, s2;
int cur = 1;
int i = 0;
vector<char> res;
while (cur <= n) {
if (!s1.empty() && s1.back() == cur) {
s1.pop_back();
res.push_back('b');
cur++;
} else if (!s2.empty() && s2.back() == cur) {
s2.pop_back();
res.push_back('d');
cur++;
} else if (i < n && color[i] == 0) {
s1.push_back(a[i]);
res.push_back('a');
i++;
} else if (i < n && color[i] == 1) {
s2.push_back(a[i]);
res.push_back('c');
i++;
} else {
cout << 0;
return 0;
}
}
for (int idx = 0; idx < res.size(); idx++) {
if (idx > 0) cout << " ";
cout << res[idx];
}
return 0;
}
这里空空如也




有帮助,赞一个