UVA11039

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


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


#include<stdio.h>
#include<algorithm>


#define N 500000 + 10


using namespace std;


int num[N];


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 " ,Ans);
   }
   return 0;
}
      
      







原文地址:https://www.cnblogs.com/csnd/p/12062656.html