Output
1 -1
2 -3 -2
思考:一定存在解决方案,则必有0和至少一个负数且不同整数
//最简单的,第一列只有一个负数,第二列最多两个,其余归到第三列
//可以没有正数,必须有负数
//= =哪里用栈和队列啊?
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int a[100],b[100],c[100];
int main()
{
int n,i,m[100];
while(scanf("%d",&n)!=EOF)
{
int l=0,s=0;
for(i=0;i<n;i++)
{
scanf("%d",&m[i]);
if(m[i]<0)
{
a[i]=m[i];
l++;
}
else
if(m[i]>0)
{
b[i]=m[i];
s++;
}
}
sort(a,a+n);
sort(b,b+n,cmp);
int q=0,w=0;
if(l>2)
q=s+2;
else//l=1,2
q=s;
w=1;
printf("%d ",1);
printf("%d\n",a[0]);
if(l>2)
{
printf("%d ",q);
for(i=1;i<3;i++)
printf("%d ",a[i]);
if(s>0)
{
for(i=0;i<s-1;i++)
printf("%d ",b[i]);
printf("%d",b[s-1]);
}
printf("\n");
printf("%d ",n-q-w);
for(i=3;i<l;i++)
printf("%d ",a[i]);
printf("0\n");
}
else//l<2
{
printf("%d ",q);
for(i=0;i<s-1;i++)
printf("%d ",b[i]);
printf("%d\n",b[s-1]);
printf("%d ",n-q-w);
if(l==2)
printf("%d ",a[1]);
printf("0\n");
}
}
return 0;
}