zoukankan      html  css  js  c++  java
  • 凌乱的yyy(洛谷p1803)

    这道题是一道大水题,说实话,真的水

    应该有点基础的就做得来题目描述

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

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

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

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

    输入格式:

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

    输出格式:

    一个整数最多参加的比赛数目。
    输入输出样例

    输入样例#1:

    3
    0 2
    2 4
    1 3

    输出样例#1:

    2

    看是不是水。

    这道题的做法也很多,

    贪心,

    动归,

    搜索将每一场比赛以结束时间排一次序,得到一个顺序的结构体数组,存储最前面一节课的下课时间,然后以结束时间为准,在这相同结束时间比赛中下,如果有比赛的开始时间小于等于记录的结束时间,直接参加比赛这样保证一分钟不落下,就可以得到最优值

    见代码

    #include<bits/stdc++.h>
    using namespace std;
    struct test{//结构体
        int begin;
        int end;
    }A[100000];
    bool cmp(test a,test b){//排序因子
        return a.end<b.end;//按比赛结束时间升序
    }
    int main()
    {
        int n,sum=0;
        int temp;
        int i;
        
        cin>>n;
        for(i=1;i<=n;i++)    cin>>A[i].begin>>A[i].end;//输入每场比赛开始、结束时间
        
        sort(A+1,A+1+n,cmp);//升序排序
        
        temp=0;//令temp为上一场比赛的结束时间
        for(i=1;i<=n;i++)//对所有比赛进行遍历
        {
            if(temp<=A[i].begin)//当结束时间小于下一场比赛的开始时间时,进行下一场比赛
            {
                temp=A[i].end;//记录新一场的结束时间
                sum++;//参加场数+1
            }
        }    
        cout<<sum<<endl;//输出 
        return 0;
    }
  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/kevin6666/p/10916713.html
Copyright © 2011-2022 走看看