description
solution
发现A只会有两个奇数或者没有奇数,发现a一定将两个奇数放在头尾(如果有的话),剩下的第一个数加一,最后一个数建议,中间不变即为b(注意1的情况)。
code
using namespace std;
int const mn=1e5+3,mo=1e9+7;
int n,a[mn];
bool cmp(int x,int y){
return (x&1)>(y&1);
}
int main(){
freopen("d.in","r",stdin);
freopen("d.out","w",stdout);
scanf("%d",&n);
fo(i,1,n)scanf("%d",&a[i]);
if(n==1){
printf("%d\n2\n1 %d",a[1],a[1]-1);
}else{
sort(a+1,a+n+1,cmp);
fo(i,2,n)printf("%d ",a[i]);
printf("%d\n",a[1]);
printf("%d\n",n-(a[1]==1));
printf("%d ",a[2]+1);
fo(i,3,n-1)printf("%d ",a[i]);
if(a[1]>1)printf("%d %d",a[n],a[1]-1);
else printf("%d",a[n]-1);
}
return 0;
}