CodeForces 300A Array

http://codeforces.com/problemset/problem/300/A

题意 :给你n个数字,让你分成3组,第一组各个数之积要小于0,第二组要大于0,第三组要等于0,符合要求的答案可能会有很多种,输出其中一种。

思路 :表示一开始以为要把n个数分成3组,第一组里的数都大于0这样子,所以一直卡在这儿。。。。因为这个题也相当于special judge了吧,所以要找一个最不容易出错的输出,把n个数排序,最小的肯定是负的(题目保证至少有一个正确答案),所以直接把它分在第一组就行,然后如果然后最大的数分在第二组,当然了,如果最大的数也不大于0,这时候就要把第二个第三个放在一起,这样乘积就是正数了,而剩下的因为包含一个0,所以就直接弄一组去就行了

#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
",a[0]) ;
        if(a[n-1] > 0)
        {
            printf("1 %d
",a[n-1]);
            printf("%d",n-2) ;
            for(int i = 1 ; i < n-1 ; i++)
            printf(" %d",a[i]) ;
        }
        else
        {
            printf("2 %d %d
",a[1],a[2]) ;
            printf("%d",n-3) ;
            for(int i = 3 ; i < n ; i++)
            printf(" %d",a[i]) ;
        }
       printf("
") ;
    }
    return 0 ;
}
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3427102.html