9 条题解
- 
  6
S001A. 壁垒
给定一个长度为 的序列 ,是否存在一种重排方式使得每个长度为偶数的前缀,出现的数字种类数为偶数。若存在,输出方案;否则,输出
-1。若整个序列的数字种类数为奇数,则不存在方案;否则,必定存在一种方案
- 如果整个序列的数字种类数是奇数,那么第 位(题目中保证了 为偶数)的数字种类数必定不是偶数
 - 如果整个序列的数字种类数是偶数(令其为 ),那么只需将前 个位置放置 每种数字,后面随便放置即可(这样,即可保证前 个位置,相邻偶数位每次加 ,后面恒定不变)。
 
综上所述,即可在 的时间复杂度下 此题。
signed main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); cin >> n; unordered_map<int, int> cnt; for (int i = 1; i <= n; i ++) cin >> a[i], cnt[a[i]] ++; if (cnt.size() & 1) cout << -1 << endl; else { for (auto v : cnt) cout << v.fi << " "; for (auto v : cnt) { int tot = v.se - 1; while (tot -- ) cout << v.fi << " "; } cout << endl; } return 0; } 
信息
- ID
 - 2
 - 时间
 - 1000ms
 - 内存
 - 512MiB
 - 难度
 - 2
 - 标签
 - 递交数
 - 483
 - 已通过
 - 215
 - 上传者