zoukankan      html  css  js  c++  java
  • UVA-1617 Laptop (贪心)

    题目大意:有n条长度为1的线段,n个区间,第i条线段在第i个区间中,问线段之间的最少间隙有几个。

    题目分析:先对区间排序,先按右端点排,再按左端点排。有重叠的区间(仅有交点重叠也视为重叠)之间一定可以摆不出空隙来。贪心策略:每碰到一个新的区间(与前面区间没有任何重叠),则把线段放到该区间最后一个长度为1的位置,如果不是新区间则可以直接忽略。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    struct Q
    {
        int l,r;
        bool operator < (const Q &a) const {
            if(r==a.r)
                return l<a.l;
            return r<a.r;
        }
    };
    Q a[100005];
    
    void solve(int n)
    {
        int ans=0,p=-1;
        for(int i=0;i<n;++i){
            if(a[i].r==p)
                continue;
            if(a[i].l>p){
                ++ans;
                p=a[i].r;
            }else
                ++p;
        }
        printf("%d
    ",ans-1);
    }
    
    int main()
    {
        int T,n;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            for(int i=0;i<n;++i)
                scanf("%d%d",&a[i].l,&a[i].r);
            sort(a,a+n);
            solve(n);
        }
        return 0;
    }
    

      

  • 相关阅读:
    面向对象
    Vue + webpack 项目实践
    配置webstorm监听less时时转换
    delegate事件代理
    JS for 循环
    JS while 循环
    JS switch 分支语句
    JS if 判断
    JS 运算符
    JS typeof() parseInt() parseFloat()
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4876753.html
Copyright © 2011-2022 走看看