10 条题解
-
-1
我在洛谷的题解没通过,就搬到 MXOJ 上来吧。转化一下题意:无法找到一个偶数 使得构造出来的序列的第 项所有元素的出现次数为奇数。
结论:若 的种类数为奇数,那么一定无法构造出来。
证明:很显然,我们取 为 即可。
那么我们可以把 中所有出现过的数都只输出一遍,然后接下来去掉刚刚出现过的数,然后随便输出即可。
证明一下这个构造。
我们设 中有 个不同的数,那么因为 不为奇数,按这样构造前 个一定满足要求。
而后 个的每个数因为都在前 个出现过了,那么后 个也满足要求。
那么我们就直接模拟即可:
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n; int a[N]; vector<int> v; map<int,int> mp; signed main(){ ios::sync_with_stdio(0);cin.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; mp[a[i]]++; } if(mp.size()%2){ cout<<-1; return 0; } sort(a+1,a+n+1); for(int i=1;i<=n;i++){ if(mp[i]){ cout<<i<<' '; for(int j=1;j<mp[i];j++) v.push_back(i); } } for(int i:v) cout<<i<<' '; return 0; }
信息
- ID
- 2
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 442
- 已通过
- 192
- 上传者