Codeforces Round #386 (Div. 2) E
题意:给你n个数,和m,让我们从1-m选数字,使得n个数奇数和偶数个数相同切各不相同思路:模拟
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
set<ll > s;
map<ll ,int > ma;
ll b;
ll a;
int main(){
cin>>n>>m;
ll x;
for(int i=1;i<=n;i++){
scanf("%lld",&x);
a=x;
s.insert(x);
}
int s1=0,s2=0;
for(set<ll >::iterator it=s.begin();it!=s.end();it++){
ma[*it]++;
if(*it&1) s1++;
else s2++;
}
s1=n/2-s1;
s2=n/2-s2;
if(s1<0) s1=0;
if(s2<0) s2=0;
int sum=0;
int l=0;
for(int i=1;i<=m;i+=2){
if(s1==0) break;
if(!ma){
s1--;
b[++l]=i;
sum++;
}
}
for(int i=2;i<=m;i+=2){
if(s2==0) break;
if(!ma){
b[++l]=i;
s2--;sum++;
}
}
if(s1||s2) cout<<-1<<endl;
else {
int r=1;
int sum1=0,sum2=0;
cout<<sum<<endl;
for(int i=1;i<=n;i++){
int t=0;
if(ma]){
if(a&1){
if(sum1<n/2) {
printf("%d ",a);
sum1++;ma]=0;t=1;
}
}
else {
if(sum2<n/2){
printf("%d ",a);
sum2++;ma]=0;t=1;
}
}
}
if(!t) printf("%d ",b);
}
printf("\n");
}
}
页:
[1]