zoukankan      html  css  js  c++  java
  • 题目1088:剩下的树(小端快排+大端判断边界)

    http://ac.jobdu.com/problem.php?pid=1088

    题目描述:                       

        有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。     现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。     可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

    输入:                       

        两个整数L(1<=L<=10000)和M(1<=M<=100)。     接下来有M组整数,每组有一对数字。

    输出:                       

        可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

    样例输入:                       
    500 3
    100 200
    150 300
    470 471
    样例输出:                       
    298

    # include<iostream>
    using namespace std;
     
    # include<algorithm>
     
    struct Node
    {
        int s;
        int e;
    };
     
    bool cmp(Node a, Node b)
    {
        return a.s < b.s;
    }
     
    int main()
    {
        int l, m;
        Node a[101];
        int i, k;
     
        while (cin >> l >> m)
        {
            for (i = 1; i <= m; i++)
            {
                cin >> a[i].s >> a[i].e;
            }
     
            sort(a + 1, a + 1 + m, cmp);
            k = -1;
            for (i = 1; i <= m; i++)
            {
                if (a[i].e <= k)
                {
                    //donothing
                }
                else if (a[i].s <= k)
                {
                    l -= (a[i].e - k);
                    k = a[i].e;
                }
                else
                {
                    l -= (a[i].e - a[i].s +1);
                    k = a[i].e;
                }
            }
            cout << l + 1 << endl;
        }
        return 0;
    }
    /**************************************************************
        Problem: 1088
        User: mmcNuaa@163.com
        Language: C++
        Result: Accepted
        Time:40 ms
        Memory:1520 kb
    ****************************************************************/
    View Code
  • 相关阅读:
    URAL 2080 莫队
    Codeforces Round #361 (Div. 2) C D
    UVALive 7297 bfs
    UVALive 7472
    HDU 5773 最长上升子序列
    递归求解最大值和最小值
    数字方阵旋转问题
    实现循环队列的各种基本运算
    实现顺序栈的各种基本运算
    使用两个栈来实现队列
  • 原文地址:https://www.cnblogs.com/mmcmmc/p/3869138.html
Copyright © 2011-2022 走看看