Codeforces Round #386 (Div. 2) E - Numbers Exchange
阿新 • • 發佈:2017-08-18
type chang 思路 space color pri pan style break
題意:給你n個數,和m,讓我們從1-m選數字,使得n個數奇數和偶數個數相同切各不相同
思路:模擬
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 int n,m; 6 set<ll > s; 7 map<ll ,int > ma; 8 ll b[200005]; 9 ll a[200005]; 10 int main(){ 11 cin>>n>>m; 12 ll x; 13 for(int i=1;i<=n;i++){14 scanf("%lld",&x); 15 a[i]=x; 16 s.insert(x); 17 } 18 int s1=0,s2=0; 19 for(set<ll >::iterator it=s.begin();it!=s.end();it++){ 20 ma[*it]++; 21 if(*it&1) s1++; 22 else s2++; 23 } 24 s1=n/2-s1; 25 s2=n/2-s2; 26 if(s1<0) s1=0; 27 if(s2<0) s2=0; 28 int sum=0; 29 int l=0; 30 for(int i=1;i<=m;i+=2){ 31 if(s1==0) break; 32 if(!ma[i]){ 33 s1--; 34 b[++l]=i; 35 sum++; 36 } 37 38 } 39 for(int i=2;i<=m;i+=2){ 40 if(s2==0) break; 41if(!ma[i]){ 42 b[++l]=i; 43 s2--;sum++; 44 } 45 46 } 47 48 if(s1||s2) cout<<-1<<endl; 49 else { 50 int r=1; 51 int sum1=0,sum2=0; 52 cout<<sum<<endl; 53 for(int i=1;i<=n;i++){ 54 int t=0; 55 if(ma[a[i]]){ 56 if(a[i]&1){ 57 if(sum1<n/2) { 58 printf("%d ",a[i]); 59 sum1++;ma[a[i]]=0;t=1; 60 } 61 } 62 else { 63 if(sum2<n/2){ 64 printf("%d ",a[i]); 65 sum2++;ma[a[i]]=0;t=1; 66 } 67 } 68 } 69 if(!t) printf("%d ",b[r++]); 70 } 71 printf("\n"); 72 } 73 }
Codeforces Round #386 (Div. 2) E - Numbers Exchange