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 }
浙公网安备 33010602011771号