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 }
原文地址:https://www.cnblogs.com/zjutzz/p/2909773.html