zoukankan      html  css  js  c++  java
  • P1803 凌乱的yyy / 线段覆盖

    题目背景

    快noip了,yyy很紧张!

    题目描述

    现在各大oj上有n个比赛,每个比赛的开始、结束的时间点是知道的。

    yyy认为,参加越多的比赛,noip就能考的越好(假的)

    所以,他想知道他最多能参加几个比赛。

    由于yyy是蒟蒻,如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛。

    输入输出格式

    输入格式:

    第一行是一个整数n ,接下来n行每行是2个整数ai,bi(ai<bi),表示比赛开始、结束的时间。

    输出格式:

    一个整数最多参加的比赛数目。

    输入输出样例

    输入样例1:

    3
    0 2
    2 4
    1 3

    输出样例1:

    2

    说明

    对于20%的数据,n≤10;
    对于50%的数据,n≤1000;
    对于70%的数据,n≤100000;
    对于100%的数据,n≤1000000,0≤ai<bi≤1000000。

    思路:

    首先,将所有的区间按照右端点排序;然后依次每局每个区间,如果当前区间不与下一个区间冲突,则使答案+1;

    代码:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    
    long long read()
    {
        long long x=0,f=1;
        char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    
    struct GRASS{
        int l,r;
    }grass[1000008];
    
    int cmp(GRASS x,GRASS y)
    {
        if(x.r^y.r) return x.r<y.r; 
        else return x.l>y.l;
    } 
    
    int n,max_left,now,ans=1; 
    
    int main()
    {
        n=read();
        for(int i=1;i<=n;++i)
        {
            grass[i].l=read();
            grass[i].r=read();
            max_left=max(max_left,grass[i].r);
        }
        sort(grass+1,grass+n+1,cmp);
        now=grass[1].r;
        for(int i=2;i<=n;++i)
        {
            if(grass[i].l>=now)
            {
                ans++;
                now=grass[i].r;
            }
        }
        printf("%d",ans);
        return 0;
    } 
  • 相关阅读:
    逻辑卷扩容
    iptables网络防火墙||SNAT,DNAT等转发路由动作
    常用rman操作语句
    常用Oracle的SQL语句
    oracle中的单引号和双竖线||以及q'间隔符
    网站升级HTTPS教程
    站长必备:网站被黑后怎么快速搞定
    常见HTTP错误代码
    在Android中实现一个简易的Http服务器
    Android开发新手常见的10个误区
  • 原文地址:https://www.cnblogs.com/-hhs/p/11196129.html
Copyright © 2011-2022 走看看