E - Building designing
题目:有n个绝对值不为0的数字,从中找到一个序列,正负交替,绝对值递增,求序列最大长度。
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
int a[800008];
int cmp(int q,int w)
{
return fabs(q)>fabs(w);
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int t,i,sum=1,flag;
scanf("%d",&t);
for(i=0;i<t;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+t,cmp);
if(a[0]>0) 判断正负交替,判断第一个是正是负。
flag=1;
else flag=0;
for(i=1;i<t;i++)
{
if(flag)
{
if(a[i]<0) flag是判断的标准。
{
flag=0;
sum++;
}
}
else
{
if(a[i]>0)
{
flag=1;
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}
题意:
按照绝对值大小从小到大,且必须正负值间隔,问最长序列的长度
思路:
有flag控制正负间隔,排序是按照绝对值排序