uva 11039 Building designing
https://vjudge.net/problem/UVA-11039
题意:
给出n个不相同的非0整数,要求从其中选出一些数组成一个数列,这个数列绝对值递增但是正负相间,输出最长序列的长度。
思路:
先按照绝对值大小排序,然后按照正负相间选就行了。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 int a[500000+5]; 7 8 int mabs(int b) 9 { 10 return b >= 0 ? b : -b; 11 } 12 13 bool cmp(int b,int c) 14 { 15 return mabs(b) < mabs(c); 16 } 17 18 int main() 19 { 20 int t; 21 22 scanf("%d",&t); 23 24 while (t--) 25 { 26 int n; 27 28 scanf("%d",&n); 29 30 for (int i = 0;i < n;i++) 31 scanf("%d",a + i); 32 33 sort(a,a+n,cmp); 34 35 int cnt = 1; 36 int pre = a[0]; 37 38 for (int i = 1;i < n;i++) 39 { 40 if (pre < 0 && a[i] > 0) 41 { 42 pre = a[i]; 43 cnt++; 44 } 45 46 if (pre > 0 && a[i] < 0) 47 { 48 pre = a[i]; 49 cnt++; 50 } 51 } 52 53 printf("%d\n",cnt); 54 } 55 56 return 0; 57 }
康复训练中~欢迎交流!