uva11039 Building Designing
题意:给出n个数,请按照他们绝对值的递增顺序排序,且相邻元素不能有相同符号(必须一个大于0,一个小于0),问这样操作后最多有多少个元素
分析:先调用sort排序然后逐个判断相邻两个元素的乘积是否小于0. 注意结果会溢出,不能用int,可以用double,当然用bool型变量标记也可以
1 #include <stdio.h> 2 #include <iostream> 3 #include <vector> 4 #include <algorithm> 5 #include <math.h> 6 #define zz 7 using namespace std; 8 bool cmp(double a, double b){ 9 return fabs(a)<fabs(b); 10 } 11 int main(){ 12 #ifndef zz 13 freopen("in.txt", "r", stdin); 14 #endif 15 int p; 16 scanf("%d", &p); 17 while(p--){ 18 vector<double>v; 19 int n; 20 scanf("%d", &n); 21 int i; 22 for(i=0; i<n; i++){ 23 int x; 24 scanf("%d", &x); 25 v.push_back(x); 26 } 27 sort(v.begin(), v.end(), cmp); 28 double jar = v[0]; 29 int cnt = 1; 30 for(i=1; i<v.size(); i++){ 31 if(v[i]*jar<0){ 32 cnt++; 33 jar = v[i]; 34 } 35 } 36 printf("%d\n", cnt); 37 } 38 return 0; 39 }
Greatness is never a given, it must be earned.