您的位置:首页 > 其它

UVA11039

2014-11-02 11:38 246 查看
题意:

给你一个序列,由n个数字组成,每个数字的绝对值都不相同,然后让你从这n个数中拿出一些数,组成一个绝对值递增并且正负交替的最大序列,问组成的最大序列的最大长度是多少?

思路:

比较简单,突破口是所有数字的绝对值都不同,那么我们直接模拟就行了,直接按绝对值sort一遍,然后第一个默认是找出序列的第一个,然后直接看看有多少正负交替的就行了,具体看代码。

#include<stdio.h>

#include<algorithm>

#define N 500000 + 10

using namespace std;

int num
;

int abss(int x)

{

return x > 0 ? x : -x;

}

bool camp(int a ,int b)

{

return abss(a) < abss(b);

}

int main ()

{

int n ,i ,Ans ,nowzf ,t;

scanf("%d" ,&t);

while(t--)

{

scanf("%d" ,&n);

for(i = 1 ;i <= n ;i ++)

scanf("%d" ,&num[i]);

sort(num + 1 ,num + n + 1 ,camp);

num[1] < 0 ? nowzf = 1 : nowzf = -1;

for(Ans = 0 ,i = 1 ;i <= n ;i ++)

{

if(num[i] >= 0 && nowzf < 0 || num[i] < 0 && nowzf > 0)

{

Ans ++;

nowzf *= -1;

}

}

printf("%d\n" ,Ans);

}

return 0;

}





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: