sunbird 发表于 2017-12-8 20:32:51

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]
查看完整版本: Codeforces Round #386 (Div. 2) E