zoukankan      html  css  js  c++  java
  • UVa 11039 Building designing (贪心+排序+模拟)

    题意:给定n个非0绝对值不相同的数,让他们排成一列,符号交替但绝对值递增,求最长的序列长度。

    析:我个去简单啊,也就是个水题。首先先把他们的绝对值按递增的顺序排序,然后呢,挨着扫一遍,只有符号不同才计数,easy!!!

    代码如下:

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    const int maxn = 500000 + 10;
    struct node{
        int num, pnum;
        node(){ }
        node(int n) : num(n){ pnum = abs(n); }
        bool operator < (const node &p) const {
            return pnum < p.pnum;
        }
    };
    
    node a[maxn];
    
    int main(){
        int n, x, T;  cin >> T;
        while(T--){
            scanf("%d", &n);
            for(int i = 0; i < n; ++i){
                scanf("%d", &x);
                a[i] = node(x);
            }
    
            sort(a, a+n);
            int cnt = 1;
            int ok = a[0].num > 0 ? 1 : 0;
            for(int i = 1; i < n; ++i)
                if((a[i].num > 0 && !ok ) || (ok && a[i].num < 0)){  ++cnt; ok = !ok; }
            printf("%d
    ", cnt);
        }
        return 0;
    }
    
  • 相关阅读:
    307.区域与检索--数组可修改
    202.快乐数
    263.丑数
    205.同构字符串
    204.计数质数
    40.组合总和Ⅱ
    811.子域名访问计数
    39.组合总和
    udp与tcp
    SQL复习
  • 原文地址:https://www.cnblogs.com/dwtfukgv/p/5533087.html
Copyright © 2011-2022 走看看