http://codeforces.com/problemset/problem/300/A
题意 :给你n个数字,让你分成3组,第一组各个数之积要小于0,第二组要大于0,第三组要等于0,符合要求的答案可能会有很多种,输出其中一种。
思路 :表示一开始以为要把n个数分成3组,第一组里的数都大于0这样子,所以一直卡在这儿。。。。因为这个题也相当于special judge了吧,所以要找一个最不容易出错的输出,把n个数排序,最小的肯定是负的(题目保证至少有一个正确答案),所以直接把它分在第一组就行,然后如果然后最大的数分在第二组,当然了,如果最大的数也不大于0,这时候就要把第二个第三个放在一起,这样乘积就是正数了,而剩下的因为包含一个0,所以就直接弄一组去就行了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std ; int main() { int n ; while(scanf("%d",&n)!=EOF) { int a[1100] ; for(int i = 0 ; i < n ; i++) scanf("%d",&a[i]) ; sort(a,a+n) ; printf("1 %d\n",a[0]) ; if(a[n-1] > 0) { printf("1 %d\n",a[n-1]); printf("%d",n-2) ; for(int i = 1 ; i < n-1 ; i++) printf(" %d",a[i]) ; } else { printf("2 %d %d\n",a[1],a[2]) ; printf("%d",n-3) ; for(int i = 3 ; i < n ; i++) printf(" %d",a[i]) ; } printf("\n") ; } return 0 ; }