Uva 11039 Building designing

题意:相当于给你n个数,正负相替,绝对值递增

题解:按绝对值排序,然后根据第一个正还是负开始贪心找。注意一点的是,从第一个开始取不会影响。

 

代码:

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[500000+20];
 4 bool cmp(int a,int b)
 5 {
 6         return abs(a) > abs(b);
 7 }
 8 
 9 int main()
10 {
11         ios::sync_with_stdio(false);
12         int test;
13         cin >> test;
14         while(test--){
15                 int n;
16                 cin >> n;
17                 for(int i = 1;i <= n; i++) cin >> a[i];
18                 sort(a+1,a+n+1,cmp);
19                 int flag,ans=1;
20                 if(a[1]>0) flag=1;
21                 else flag = 0;
22                 for(int i = 2;i <= n; i++)
23                 {
24                         if(a[i]>0 && flag==0)
25                         {
26                                 flag=1;
27                                 ans++;
28                         }
29                         else if(a[i]<0 && flag==1)
30                         {
31                                 flag=0;
32                                 ans++;
33                         }
34                 }
35                 cout << ans << endl;
36         }
37 
38 }

 

posted on 2015-11-23 22:02  小松song  阅读(82)  评论(0)    收藏  举报

导航