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 }
View Code

 

posted @ 2013-10-12 18:59  Yours1103  阅读(139)  评论(0编辑  收藏  举报