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

 

转载于:https://www.cnblogs.com/luyingfeng/p/3427102.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值