uva 11039

题意:有n个绝对值各不相同的非0整数,选出尽量多的数,排成一个序列,使得正负号交替且绝对值递增。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 
 7 int a[500010];
 8 int n;
 9 
10 int cmp(int a,int b)
11 {
12     return abs(a)<abs(b);
13 }
14 
15 int main()
16 {
17     int t;
18     scanf("%d",&t);
19     while(t--)
20     {
21         scanf("%d",&n);
22         for(int i=0;i<n;++i)
23             scanf("%d",&a[i]);
24       sort(a,a+n,cmp);
25     int cnt=0;
26     int flag=0;
27     for(int i=0;i<n;++i)
28     {
29         if(flag==0)
30         {
31             if(a[i]>0)
32                 flag=1;
33             else
34               flag=2;
35             cnt++;
36         }
37         else if(flag==1)
38         {
39             if(a[i]<0)
40             {
41                 flag=2;
42                 cnt++;
43             }
44         }
45         else if(flag==2)
46         {
47             if(a[i]>0)
48             {
49                 flag=1;
50                 cnt++;
51             }
52         }
53     }
54     printf("%d
", cnt);
55     }
56     return 0;
57 }
原文地址:https://www.cnblogs.com/sunshinemxh/p/4787025.html