1 条题解
-
0
原文来自洛谷 @ljlbj_fengyuwuzu,如有侵权可邮箱 tanqf7@163.com 申请下架。
手推几组数据不难发现,如果有两个相同的 之间最多只隔着一个其他元素,那么 一定是答案。
分两种情况证明:
- 设 ,那么对区间 进行一次会议肯定会让 ,同理,对 进行会议很定会让 。以此类推,就可以让所有的 相同。
- 设 且 ,那么对区间 进行一次会议很定会让 。依次类推,就可以让所有的 相同。
代码:
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 5; int n; int a[MAXN]; bool in_ans[MAXN]; int last[MAXN]; void solve() { memset(in_ans, 0, sizeof(in_ans)); memset(last, 0, sizeof(last)); vector<int> ans; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for (int i = 1; i <= n; i++) { if(last[a[i]]) { if(i - last[a[i]] < 3 && !in_ans[a[i]]) { in_ans[a[i]] = true; ans.push_back(a[i]); } } last[a[i]] = i; } sort(ans.begin(), ans.end()); if(ans.empty()) printf("-1\n"); else { for (int i = 0; i < (int)ans.size(); i++) { cout << ans[i] << " \n"[i == (int)ans.size() - 1]; } } } int main() { int T; scanf("%d", &T); while(T--) { solve(); } return 0; }v
- 1
信息
- ID
- 30
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者