Codeforces Round #205 (Div. 2) : B
如果某个数出现的次数大于或等于2次,那么平均分配到两个容器里面;
这里利用一个k来使得当出现次数为奇数时候分配得更加均匀;
剩下的就平均分配到两个容器里;
代码:
1 #include<iostream> 2 using namespace std; 3 4 int a[220],b[220],f[110],s,k,n; 5 int main() 6 { 7 cin >> n; 8 for(int i=0;i<2*n;i++) 9 { 10 cin >> a[i]; 11 f[a[i]]++; 12 } 13 for(int i=0;i<110;i++) 14 if(f[i]>=2) 15 { 16 s+=f[i]-2; 17 for(int j=0;j<2*n;j++) 18 { 19 if(a[j]==i) 20 { 21 b[j]=(k%2)+1; 22 k++; 23 } 24 } 25 } 26 if(s%2==0)cout<<((2*n-s)/2)*((2*n-s)/2)<<endl; 27 else cout<<((2*n-s-1)/2)*((2*n-s+1)/2)<<endl; 28 for(int i=0;i<2*n;i++) 29 if(b[i]==0) 30 { 31 b[i]=(k%2)+1; 32 k++; 33 } 34 for(int i=0;i<n*2;i++) 35 cout << " " << b[i]; 36 return 0; 37 }