Files
python/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/6_dfs.cpp
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

50 lines
1.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 110;
int a[N];
int st[10];
vector<PII> q;
int res;
int n;
int main() {
#ifndef ONLINE_JUDGE
freopen("6.in", "r", stdin);
#endif
while (cin >> n && n) {
// 各种清空
memset(a, 0, sizeof a);
memset(st, 0, sizeof st);
q.clear();
res = 0;
for (int i = 1; i <= n; i++) cin >> a[i]; // 密码数组
for (int i = 1; i <= n; i++) { // 遍历每个位置
if (!st[a[i]]) { // 如果此数字没有被处理过
st[a[i]] = 1; // 标识已处理
for (int j = n; j; j--) // 从后向前找到它的终止位置
if (a[i] == a[j]) {
q.push_back({i, j}); // 记录有效区间
break;
}
}
}
// 从左到右枚举,所以,不再需再进行按左端点排序,现在就是按左端点排序完的
// Q:求一组区间的相交区间个数?如果存在一个相交区间,就多加1个1
res = q.size();
// 如果存在区间相交,则res++
for (int i = 0; i < q.size(); i++)
for (int j = i + 1; j < q.size(); j++)
if (q[i].second > q[j].first && q[j].second > q[i].second) res++;
for (int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
cout << res << endl;
cout << endl;
}
return 0;
}