UVa11039

来源:互联网 发布:cocos2dx lua mac 编辑:程序博客网 时间:2024/06/14 04:20

题目链接

简介:
n个绝对值不同非零整数,选出尽量多的数,排成一个序列,使得正负号交替,绝对值递增

分析:
实际上我们可以把两种颜色的楼层分开,分别排序
之后贪心的构造楼层就可以了

当然我们还有一种更简单的方法,
绝对值排序
如果相邻两个数的乘积为负,那么这两层楼就可以计算入答案中

tip

乘的操作会爆int,所以要开ll

//这里写代码片#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#define ll long longusing namespace std;const int INF=1e9;const int N=500010;ll a[N];int n;int cmp(const int &a,const int &b){    return abs(a)>abs(b);}int main(){    int T;    scanf("%d",&T);    while (T--)    {        scanf("%d",&n);        for (int i=1;i<=n;i++) scanf("%lld",&a[i]);        sort(a+1,a+1+n,cmp);        int ans=1;        for (int i=2;i<=n;i++)            if (a[i]*a[i-1]<0) ans++;        printf("%d\n",ans);    }    return 0;}
原创粉丝点击