4151:电影节openjudge(1)

4151:电影节

描述
大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),问李雷最多可以看多少部电影。

输入
多组数据。每组数据开头是n(n<=100),表示共n场电影。
接下来n行,每行两个整数(0到1000之间),表示一场电影的放映区间
n=0则数据结束
输出
对每组数据输出最多能看几部电影
样例输入
8
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
0
样例输出
3
解析
知识点:
1、贪心算法
2、C++里面的sort模板,在比较结构体某一成员时候的用法
(1)cmp
结构体下面写:
bool cmp(结构体 a,结构体 b)
{
return a.成员 < b.成员;
}
sort (m,m+n,cmp);
(2)operator
写在结构体里面:
struct Move
{
int S;
int E;
bool operator <(const Move & s )const{
return E>s.E;}
}

3、思路
问最多能看几部电影,贪心,第一部电影应该是最早结束的,然后根据每一部电影的结束时间推断看电影数量:如果电影的开始时间大于等于前一部电影的结束时间,就成立。

代码:

#include<stdio.h>
#include<algorithm>
using namespace std;

#define BL for(int i=0;i<n;i++)
struct Move//结构体
{
    int S;//电影开始时间
    int E;//结束时间
}m[10000];
bool cmp(Move a,Move b)//运算符的重新加载?结构体成员的比较
    {
    return a.E < b.E;
    }
int main()
{
    int n;
    while (1)//循环,输入0停止运行
    {
        scanf_s("%d", &n);//输入n电影数
        if (n == 0)break;
        BL
            scanf_s("%d %d", &m[i].S, &m[i].E);
        sort(m, m + n,cmp);//结构体成员排序:结束时间从小到大排序
        int pre = m[0].E;//第一部电影的终止时间
        int sum = 1;
        BL
            printf("%d %d\n", m[i].S, m[i].E);//检验
    BL
    if (m[i].S >= pre)//如果,电影的开始时间大于等于终止时间,成立-----“=”:因为端点也可以
    {
        sum++;
        pre = m[i].E;
    }
        printf("%d ", sum);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40472328/article/details/81511404
今日推荐