简介:
n个绝对值不同非零整数,选出尽量多的数,排成一个序列,使得正负号交替,绝对值递增
分析:
实际上我们可以把两种颜色的楼层分开,分别排序
之后贪心的构造楼层就可以了
当然我们还有一种更简单的方法,
绝对值排序
如果相邻两个数的乘积为负,那么这两层楼就可以计算入答案中
tip
乘的操作会爆int,所以要开ll
//这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#define ll long long
using 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;
}